Per motivi di discussione, un Bool può avere 2 stati, Vero o Falso. Qualsiasi altra cosa è non conforme alle specifiche di programmazione langugae. Se la tua catena di strumenti non è conforme alle sue specifiche, tieni un hosed indipendentemente da ciò che fai.
Se uno sviluppatore ha creato un tipo di Bool con più di 2 stati, è l'ultima cosa che avrebbe mai fatto sul mio codice base.
Opzione A.
if (var == true) {
...
} else if (var == false) {
...
} else {
...
}
Opzione B
if (var == true) {
...
} else {
...
}
Asserisco che l'opzione B è più solida .....
Qualsiasi twit può dirti di gestire errori imprevisti. Di solito sono banalmente facili da rilevare una volta che li si pensa. L'esempio che il tuo professore ha dato non è qualcosa che potrebbe accadere, quindi è un esempio molto povero.
A è impossibile da testare senza cablaggi test complicati. Se non riesci a crearlo, come lo testerai? Se non hai testato il codice, come sai che funziona? Se non sai che funziona, allora non stai scrivendo un software robusto. Penso che lo chiamino ancora Catch22 (Grande film, guardalo qualche volta).
L'opzione B è banale da testare.
Problema successivo, chiedi al tuo professore questa domanda "Che cosa vuoi che faccia io a riguardo se un booleano non è né vero né falso?"
Ciò dovrebbe portare ad una discussione molto interessante .....
La maggior parte dei casi, un core dump è approriate, nel peggiore dei casi infastidisce l'utente o costa un sacco di soldi. Cosa succede se, ad esempio, il modulo è il sistema di calcolo del rientro in tempo reale dello Space Shuttle? Qualsiasi risposta, non importa quanto imprecisa, non può essere peggio di abortire, che ucciderà gli utenti. Quindi, cosa fare, se sai che la risposta potrebbe essere sbagliata, vai per il 50/50, o abortisci e vai al 100% di fallimento. Se fossi un membro dell'equipaggio, prenderei il 50/50.
L'opzione A mi uccide
L'opzione B mi dà una possibilità di sopravvivenza.
Ma aspetta - è una simulazione del rientro dello space shuttle - e poi? Annuncia perché tu lo sappia. Sembra una buona idea? - NOT - perché è necessario testare il codice che si prevede di spedire.
L'opzione A è migliore per la simulazione, ma non può essere implementata. È inutile
L'opzione B è il codice distribuito in modo che la simulazione funzioni come i sistemi live.
Diciamo che questa era una preoccupazione valida. La soluzione migliore sarebbe isolare la gestione degli errori dalla logica dell'applicazione.
if (var != true || var != false) {
errorReport("Hell just froze over, var must be true or false")
}
......
if (var == true){
....
} else {
....
}
Futher reading - Macchina Xray Therac-25, guasto di Ariane 5 Rocket e altri
(Link ha molti link non funzionanti ma sufficienti informazioni che Google ti aiuterà)