Considerar 3 Escenario
Escenario 1:condición booleana
if (condition) {}
else {}
especificando una condición como persona si sería redundante, y es muy obvio para el lector lo que hace el código. No hay argumento para usar else si en este caso.
Escenario 2:estados Infinite
Aquí estamos interesados en las pruebas para las condiciones A y B (y así sucesivamente), y que puede o no estar interesado en lo que sucede si ninguno de ellos tiene :
if (conditionA) {}
else if (conditionB) {}
else {} // this might be missing as it is in your case
El punto importante aquí es que no hay un número finito de estados mutuamente excluyentes, por ejemplo: Estadoa podría ser num % 2 == 0
y conditionB podría ser num % 3 == 0
.
Creo que es natural y deseable usar una cantidad razonable de ramas aquí; si las ramas se vuelven demasiadas, esto podría ser una indicación de que un uso juicioso del diseño OO resultaría en grandes mejoras de mantenimiento.
Escenario 3:Finite states
Este es el punto medio entre los dos primeros casos: el número de estados es finito, pero más de dos. Las pruebas para detectar los valores de un tipo de enumeración-como es el ejemplo arquetípico:
if (var == CONSTANT_FOO) {}
else if (var == CONSTANT_BAR) {} // either this,
else {} // or this might be missing
En tales casos utilizando un interruptor es probablemente mejor porque se comunica inmediatamente al lector que el número de estados es finito y le da un fuerte indicio en cuanto a dónde se puede encontrar una lista de todos los estados posibles (en este ejemplo, constantes que comienzan con CONSTANT_). Mi criterio personal es el número de estados contra los que estoy probando: si es solo uno (no hay más si) usaré un if; de lo contrario, un interruptor. En cualquier caso, no escribiré otro si en este escenario.
Añadiendo otra cosa que un vacío de captura-errors bloquean
Esto está directamente relacionado con el escenario # 2 anterior. A menos que los posibles estados sean finitos y conocidos en tiempo de compilación, no puede decir que "en cualquier otro caso" significa que ocurrió un error. Viendo como en el escenario n. ° 2, un cambio se sentiría más natural, creo que el uso de este modo tiene un mal olor a código.
Use un interruptor con una derivación predeterminada en su lugar. Será comunicar su intención mucho más claramente:
switch(direction) {
case 'up': break;
case 'down': break;
default: // put error handling here if you want
}
Esto podría ser un poco más detallado, pero es claro para el lector cómo se espera que el código para funcionar. En mi opinión, un bloque de más vacío parecería antinatural y desconcertante aquí.
No, no es obligatorio tener más con un if. –
Que yo sepa, no es necesario tener otra persona en ningún idioma. Si no hay nada especial que quiera hacer cuando la condición if es falsa, tampoco existe una necesidad lógica. Sería un bloque vacío. – Toast
'else' es una palabra clave opcional en el bloque' if/else'. Y, posible, que una lógica de su código de tutorial no requiera 'else' –