Als Faustregel gilt für mich, dass Sie Assert-Ausdrücke verwenden, um interne Fehler und Ausnahmen für externe Fehler zu finden. Von der folgenden Diskussion von Greg können Sie hier viel profitieren .
Assert-Ausdrücke werden verwendet, um Programmierfehler zu finden: entweder Fehler in der Programmlogik selbst oder Fehler in der entsprechenden Implementierung. Eine Assert-Bedingung überprüft, ob das Programm in einem definierten Zustand bleibt. Ein "definierter Zustand" ist im Grunde ein Zustand, der mit den Annahmen des Programms übereinstimmt. Beachten Sie, dass ein "definierter Zustand" für ein Programm kein "idealer Zustand" oder sogar "ein gewöhnlicher Zustand" oder sogar ein "nützlicher Zustand" sein muss, sondern später mehr zu diesem wichtigen Punkt.
Um zu verstehen, wie Zusicherungen in ein Programm passen, betrachten Sie eine Routine in einem C ++ - Programm, die einen Zeiger dereferenzieren soll. Sollte die Routine nun testen, ob der Zeiger vor der Dereferenzierung NULL ist, oder sollte sie behaupten, dass der Zeiger nicht NULL ist, und dann fortfahren und ihn unabhängig davon dereferenzieren?
Ich stelle mir vor, dass die meisten Entwickler beides tun möchten, die Zusicherung hinzufügen, aber auch den Zeiger auf einen NULL-Wert prüfen möchten, um nicht abzustürzen, falls die versicherte Bedingung fehlschlägt. An der Oberfläche scheint es die klügste Entscheidung zu sein, sowohl den Test als auch die Prüfung durchzuführen
Im Gegensatz zu den behaupteten Bedingungen bezieht sich die Fehlerbehandlung (Ausnahmen) eines Programms nicht auf Fehler im Programm, sondern auf Eingaben, die das Programm aus seiner Umgebung erhält. Dies sind häufig "Fehler" von Seiten einer Person, z. B. ein Benutzer, der versucht, sich bei einem Konto anzumelden, ohne ein Kennwort einzugeben. Und obwohl der Fehler einen erfolgreichen Abschluss der Programmaufgabe verhindern kann, liegt kein Programmfehler vor. Das Programm kann den Benutzer aufgrund eines externen Fehlers nicht ohne Kennwort anmelden - ein Fehler des Benutzers. Wenn die Umstände anders waren und der Benutzer das richtige Passwort eingegeben hat und das Programm es nicht erkannt hat; dann, obwohl das Ergebnis immer noch das gleiche wäre, würde der Fehler jetzt zum Programm gehören.
Die Fehlerbehandlung (Ausnahmen) dient zwei Zwecken. Die erste besteht darin, dem Benutzer (oder einem anderen Client) mitzuteilen, dass ein Fehler in der Programmeingabe erkannt wurde und was dies bedeutet. Das zweite Ziel besteht darin, die Anwendung nach Erkennung des Fehlers in einem genau definierten Zustand wiederherzustellen. Beachten Sie, dass das Programm selbst in dieser Situation nicht fehlerhaft ist. Zugegeben, das Programm befindet sich möglicherweise in einem nicht idealen Zustand oder sogar in einem Zustand, in dem nichts Nützliches getan werden kann, aber es liegt kein Programmierfehler vor. Im Gegenteil, da der Fehlerbehebungsstatus vom Programmdesign vorweggenommen wird, gibt er einen aus, den das Programm verarbeiten kann.