Por el bien de mi discusión, un Bool puede tener 2 estados, verdadero o falso. Cualquier otra cosa es la no conformidad con la especificación langugae de programación. Si su cadena de herramientas no es conforme a su especificación, se le aplicará una manguera sin importar lo que haga. Si un desarrollador crea un tipo de Bool que tiene más de 2 estados, es lo último que haría en mi base de código.
Opcion A.
if (var == true) {
...
} else if (var == false) {
...
} else {
...
}
Opcion B
if (var == true) {
...
} else {
...
}
Afirmo que la opción B es más robusta .....
Cualquier imbécil puede decirte que manejes errores inesperados. Por lo general, son muy fáciles de detectar una vez que piensas en ellos. El ejemplo que ha dado su profesor no es algo que pueda suceder, por lo que es un ejemplo muy pobre.
A es imposible de probar sin arneses de prueba complicados. Si no puede crearlo, ¿cómo lo va a probar? Si no ha probado el código, ¿cómo sabe que funciona? Si no sabe que funciona, entonces no está escribiendo un software robusto. Creo que todavía lo llaman Catch22 (Gran película, mírala alguna vez).
La opción B es trivial para probar.
Siguiente problema, pregúntele al profesor esta pregunta "¿Qué quiere que haga si un booleano no es verdadero ni falso?" Eso debería conducir a una discusión muy interesante .....
En la mayoría de los casos, un volcado de núcleo es apropiado, en el peor de los casos molesta al usuario o cuesta mucho dinero. ¿Qué sucede si, por ejemplo, el módulo es el sistema de cálculo de reentrada en tiempo real del transbordador espacial? Cualquier respuesta, por inexacta que sea, no puede ser peor que abortar, lo que matará a los usuarios. Entonces, qué hacer, si sabe que la respuesta puede ser incorrecta, elija 50/50, o aborte y vaya al 100% de falla. Si fuera un miembro de la tripulación, tomaría el 50/50.
La opción A me mata La opción B me da una posibilidad de supervivencia.
Pero espera, es una simulación de la reentrada del transbordador espacial, ¿entonces qué? Abortar para que lo sepas. ¿Suena como una buena idea? - NO - porque necesita probar con el código que planea enviar.
La opción A es mejor para la simulación, pero no se puede implementar. Es inútil La opción B es el código implementado, por lo que la simulación funciona igual que los sistemas en vivo.
Digamos que esto era una preocupación válida. La mejor solución sería aislar el manejo de errores de la lógica de la aplicación.
if (var != true || var != false) {
errorReport("Hell just froze over, var must be true or false")
}
......
if (var == true){
....
} else {
....
}
Lectura adicional : máquina de rayos X Therac-25, falla del cohete Ariane 5 y otros (Link tiene muchos enlaces rotos pero suficiente información que Google ayudará)