Für meine Diskussion kann ein Bool 2 Zustände haben, Wahr oder Falsch. Alles andere entspricht nicht der Programmiersprachenspezifikation. Wenn Ihre Werkzeugkette nicht der Spezifikation entspricht, werden Sie abgespritzt, egal was Sie tun. Wenn ein Entwickler eine Art Bool mit mehr als zwei Zuständen erstellt, ist dies das Letzte, was er jemals in meiner Codebasis tun würde.
Option A.
if (var == true) {
...
} else if (var == false) {
...
} else {
...
}
Option B
if (var == true) {
...
} else {
...
}
Ich behaupte, Option B ist robuster .....
Jeder Trottel kann Ihnen sagen, dass Sie mit unerwarteten Fehlern umgehen sollen. Sie sind in der Regel sehr leicht zu erkennen, wenn Sie an sie denken. Das Beispiel, das Ihr Professor gegeben hat, kann nicht passieren, es ist also ein sehr schlechtes Beispiel.
A ist ohne gewundene Prüfgurte nicht zu testen. Wenn Sie es nicht erstellen können, wie werden Sie es testen? Wenn Sie den Code noch nicht getestet haben, woher wissen Sie, dass er funktioniert? Wenn Sie nicht wissen, dass es funktioniert, schreiben Sie keine robuste Software. Ich denke, sie nennen das immer noch einen Catch22 (Großartiger Film, schau ihn dir mal an).
Option B ist trivial zu testen.
Stellen Sie Ihrem Professor als nächstes die Frage: "Was soll ich dagegen tun, wenn ein Boolescher Wert weder Wahr noch Falsch ist?" Das sollte zu einer sehr interessanten Diskussion führen .....
In den meisten Fällen ist ein Core-Dump angemessen, im schlimmsten Fall stört er den Benutzer oder kostet viel Geld. Was ist, wenn das Modul beispielsweise das Echtzeit-Wiedereintrittsberechnungssystem des Space Shuttles ist? Jede noch so ungenaue Antwort kann nicht schlimmer sein als ein Abbruch, der die Benutzer tötet. Was tun, wenn Sie wissen, dass die Antwort möglicherweise falsch ist? Entscheiden Sie sich für 50/50 oder brechen Sie ab und versuchen Sie es mit einem 100% igen Fehler. Wenn ich ein Besatzungsmitglied wäre, würde ich die 50/50 nehmen.
Option A tötet mich Option B gibt mir eine gleichmäßige Überlebenschance.
Aber warten Sie - es ist eine Simulation des Space-Shuttle-Wiedereintritts - was dann? Abbrechen, damit Sie davon erfahren. Hört sich nach einer guten Idee an? - NICHT - weil Sie mit dem Code testen müssen, den Sie versenden möchten.
Option A ist für die Simulation besser, kann jedoch nicht bereitgestellt werden. Es ist nutzlos, dass Option B der bereitgestellte Code ist, sodass die Simulation dieselbe Leistung erbringt wie die Live-Systeme.
Angenommen, dies war ein berechtigtes Anliegen. Die bessere Lösung wäre, die Fehlerbehandlung von der Anwendungslogik zu isolieren.
if (var != true || var != false) {
errorReport("Hell just froze over, var must be true or false")
}
......
if (var == true){
....
} else {
....
}
Weitere Informationen - Therac-25-Röntgengerät, Ariane-5-Raketen-Fehler und andere (Link enthält viele defekte Links, aber genügend Informationen, die Google helfen wird)