2011-01-08 23 views

Respuesta

40

Sí, potencialmente. Considere esto (C#, Java, lo que sea):

int x = GetValueFromSomewhere(); 

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

vs esto:

int x = GetValueFromSomewhere(); 

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

En el primer caso, sólo uno de "algo" o "algo más ..." se producirá . En el segundo caso, los efectos secundarios del primer bloque hacen que la condición en el segundo bloque sea verdadera.

Entonces, para otro ejemplo, las condiciones pueden no ser mutuamente excluyentes para empezar:

int x = ...; 

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

Si a deshacerse de la "otra" aquí, entonces tan pronto como una condición ha igualado, el resto lo hará también.

+1

Gran respuesta, la aceptaré una vez que se termine el límite de tiempo. ¡Gracias! –

+0

¡Esto es genial! Una muy buena explicación. –

7

Tiene que ver con la del effeciency y sus necesidades. Si las declaraciones se ejecutan independientemente una de la otra. Cada uno correrá. De lo contrario, la instrucción solo se ejecutará si el if anterior falla.

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


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

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

Por encima de código producirá un valor diferente que el código de abajo para x=0.

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

En el primer caso, todas las declaraciones 1, 2 y 3 se ejecutará para x = 0. En el segundo caso, solo serán las declaraciones 1.

+0

-1 porque estaba preguntando sobre 'else if', not' else'. –

+8

@Mark: el constructo 'else if' es en realidad un' else' seguido de un 'if':' if (a) {} else if (b) {} 'compilará exactamente lo mismo que' if (a) { } else {if (b) {}} 'porque el primero es, de hecho, analizado como el último de acuerdo con la gramática del lenguaje. ('elif' en bash es esencialmente azúcar sintáctica para evitar que tengas que abrir múltiples bloques.) – cdhowie

+0

@ mark-szymanski respuesta corregida. Quite el voto abajo si lo desea. – fastcodejava

3

cuando tiene varias sentencias if, cada una se evalúa por separado, y si las condiciones son adecuadas, el código en todos ellos podrían ser ejecutados. Si tiene la instrucción if/elif, la segunda condición se evaluará solo después del resultado particular de la evaluación de la primera condición.

consideran este pseudocódigo:

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

Si tanto cond A y B son ciertas cond, ambas acciones se ejecutan.

Por otro lado, este pseudocódigo:

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

Sólo uno de los twomactions (o ninguno) se ejecutará, no importa cómo evalúan ambas condiciones.

Cuestiones relacionadas