2011-01-08 15 views

Odpowiedz

40

Tak, potencjalnie. Rozważmy następujący (C#, Java, cokolwiek):

int x = GetValueFromSomewhere(); 

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

vs to:

int x = GetValueFromSomewhere(); 

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

W pierwszym przypadku, tylko jeden o "coś" lub "coś innego ..." wystąpią . W drugim przypadku efekty uboczne pierwszego bloku sprawiają, że warunek w drugim bloku jest prawdziwy.

Następnie do innego przykładu, warunki nie mogą być wzajemnie wykluczające się zacząć:

int x = ...; 

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

Jeśli pozbyć się „inny” tutaj, a następnie jak najszybciej jeden warunek został dopasowany, reszta będzie także.

+1

Świetna odpowiedź, zaakceptuję ją, gdy minie limit czasu. Dzięki! –

+0

To jest świetne! Bardzo dobre wytłumaczenie. –

7

Ma to związek z efektywnością i potrzebami. Jeśli instrukcje są wykonywane niezależnie od siebie. Każdy będzie działać. Inaczej, jeśli instrukcja jest wykonywana tylko wtedy, gdy poprzednie, jeśli się nie powiedzie.

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


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

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

Powyższy kod będzie dawał inną wartość niż poniższy kod dla x=0.

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

W pierwszym przypadku wszystkie oświadczenia 1, 2 i 3 zostanie wykonany dla x = 0. W drugim przypadku będą to tylko oświadczenia 1.

+0

-1, ponieważ pytałem o 'else if', a nie' else'. –

+8

@ Mark: Konstrukcja 'else if' to właściwie' else', po którym następuje 'if':' if (a) {} else if (b) {} 'skompiluje dokładnie to samo co' if (a) { } else {if (b) {}} 'ponieważ ten pierwszy jest w rzeczywistości analizowany jako ostatni zgodnie z gramatyką języka. ('' elif' in bash to zasadniczo cukier syntaktyczny, który zapobiega otwieraniu wielu bloków.) – cdhowie

+0

@ poprawiona odpowiedź mark-szymanski. Usuń głosowanie, jeśli chcesz. – fastcodejava

3

Gdy masz wiele instrukcji if, każda jest oceniana osobno, a jeśli warunki są poprawne, kod we wszystkich może zostać wykonany. Jeśli masz instrukcję if/elif, drugi warunek zostanie oceniony tylko po określonym wyniku oceny pierwszego warunku.

Rozważmy to Pseudokod:

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

Jeśli oba dyr dyr A i B są prawdziwe, oba działania będą wykonane.

Z drugiej strony, to pseudokod:

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

Tylko jeden z twomactions (lub nie) będą realizowane, bez względu na to, jak ocenia oba warunki.

Powiązane problemy