Per motivi di discussione, un Bool può avere 2 stati, Vero o Falso. Qualsiasi altra cosa non è conforme alla specifica delle lingue di programmazione. Se la catena degli strumenti non è conforme alle sue specifiche, si viene sottoposti a qualsiasi tipo di operazione. Se uno sviluppatore ha creato un tipo di Bool con più di 2 stati, è l'ultima cosa che farebbe mai sulla mia base di codice.
Opzione A.
if (var == true) {
...
} else if (var == false) {
...
} else {
...
}
Opzione B
if (var == true) {
...
} else {
...
}
Affermo che l'opzione B è più robusta .....
Qualsiasi twit può dirti di gestire errori imprevisti. Di solito sono banalmente facili da rilevare quando ci pensi. L'esempio che il tuo professore ha dato non è qualcosa che potrebbe accadere, quindi è un esempio molto scarso.
A è impossibile testare senza cablaggi di prova contorti. Se non riesci a crearlo, come lo testerai? Se non hai testato il codice, come fai a sapere che funziona? Se non sai che funziona, non stai scrivendo un software affidabile. Penso che lo chiamino ancora Catch22 (film fantastico, guardalo qualche volta).
L'opzione B è banale da testare.
Prossimo problema, fai al professore questa domanda "Cosa vuoi che faccia se un booleano non è né vero né falso?" Ciò dovrebbe condurre a una discussione molto interessante .....
Nella maggior parte dei casi, una discarica di base è adeguata, nel peggiore dei casi disturba l'utente o costa molti soldi. E se, diciamo, il modulo fosse il sistema di calcolo del rientro in tempo reale dello Space Shuttle? Qualsiasi risposta, per quanto imprecisa, non può essere peggio che interrompere, il che ucciderà gli utenti. Quindi cosa fare, se sai che la risposta potrebbe essere sbagliata, scegli il 50/50 o interrompi e vai al fallimento del 100%. Se fossi un membro dell'equipaggio, prenderei il 50/50.
L'opzione A mi uccide L'opzione B mi dà persino la possibilità di sopravvivere.
Ma aspetta - è una simulazione del rientro dello space shuttle - e allora? Interrompi così lo sai. Sembra una buona idea? - NON - perché devi testare con il codice che intendi spedire.
L'opzione A è migliore per la simulazione, ma non può essere distribuita. È inutile che l'opzione B sia il codice distribuito, quindi la simulazione esegue lo stesso dei sistemi live.
Diciamo che questa era una preoccupazione valida. La soluzione migliore sarebbe quella di 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 {
....
}
Altre letture : macchina a raggi X Therac-25, guasto del missile Ariane 5 e altri (il collegamento ha molti collegamenti interrotti ma informazioni sufficienti che Google aiuterà)