2011-01-08 12 views

Antwort

40

Ja, möglicherweise. Betrachten Sie diese (C#, Java, was auch immer):

int x = GetValueFromSomewhere(); 

if (x == 0) 
{ 
    // Something 
    x = 1; 
} 
else if (x == 1) 
{ 
    // Something else... 
} 

vs dies:

int x = GetValueFromSomewhere(); 

if (x == 0) 
{ 
    // Something 
    x = 1; 
} 
if (x == 1) 
{ 
    // Something else... 
} 

Im ersten Fall nur ein von "Something" oder "Etwas anderes ..." tritt auf . Im zweiten Fall machen die Nebeneffekte des ersten Blocks die Bedingung im zweiten Block wahr.

Dann für ein anderes Beispiel können die Bedingungen nicht gegenseitig ausschließen, mit zu beginnen:

int x = ...; 

if (x < 10) 
{ 
    ... 
} 
else if (x < 100) 
{ 
    ... 
} 
else if (x < 1000) 
{ 
    ... 
} 

Wenn Sie dem „else“ hier loswerden, dann, sobald eine Bedingung erfüllt ist, der Rest wird auch.

+1

Große Antwort, ich werde es akzeptieren, sobald das Zeitlimit abgelaufen ist. Vielen Dank! –

+0

Das ist großartig! Eine sehr gute Erklärung. –

7

Es hat mit Effizienz und Ihren Bedürfnissen zu tun. Wenn Anweisungen unabhängig voneinander ausgeführt werden. Jeder wird laufen. Else if if-Anweisung wird nur ausgeführt, wenn die vorherigen ifs fehlschlagen.

6
if (x == 0) { 
    // 1 
} 


if (x >= 0) { 
    // 2 
} 

if (x <= 0) { 
    // 3 
} 

Above Code anderer Wert als der für x=0 nachfolgenden Code erzeugen.

if (x == 0) { 
    // 1 
} else if (x >= 0) { 
    // 2 
} else { 
    // 3 
} 

Im ersten Fall werden alle Anweisungen 1, 2 und 3 für x = 0 ausgeführt werden. Im zweiten Fall werden nur Aussagen 1 sein.

+0

-1 weil ich nach 'else if' gefragt habe, nicht nach' else'. –

+8

@Mark: Das 'else if' Konstrukt ist eigentlich ein' else' gefolgt von einem 'if':' if (a) {} else if (b) {} 'kompiliert genau das gleiche wie' if (a) { } else {if (b) {}} 'weil das erstere in Übereinstimmung mit der Sprachgrammatik als letzteres geparst wird. ('elif' in bash ist im Wesentlichen syntaktischer Zucker, um zu verhindern, dass Sie mehrere Blöcke öffnen müssen.) – cdhowie

+0

@ mark-szymanski Antwort korrigiert. Entfernen Sie die Abstimmung, wenn Sie möchten. – fastcodejava

3

Wenn Sie mehrere if -Anweisungen haben, wird jede separat ausgewertet, und wenn die Bedingungen stimmen, wird möglicherweise der Code in allen davon ausgeführt. Wenn Sie eine if/elif-Anweisung haben, wird die zweite Bedingung erst nach einem bestimmten Ergebnis der Bewertung der ersten Bedingung ausgewertet.

Betrachten Sie diese Pseudo-Code:

If (cond A) { action 1} 
If (cond B) { action 2} 

Wenn beide cond A und B cond wahr sind, wird ausgeführt, beide Aktionen.

Auf der anderen Seite, dieser Pseudo-Code:

If (cond A) {action 1} 
Elif (cond B) {action 2} 

Nur einer der twomactions (oder keines von beiden) wird ausgeführt, egal wie beiden Bedingungen zu bewerten.

Verwandte Themen