Wenn ich eine Funktion schreibe, möchte ich oft sicherstellen, dass die Eingaben gültig sind, um solche Fehler so früh wie möglich zu erkennen (ich glaube, dies nennt man Vorbedingungen). Wenn eine Vorbedingung fehlschlägt, habe ich immer eine Ausnahme ausgelöst. Aber ich fange an zu bezweifeln, ob dies die beste Vorgehensweise ist und wenn nicht, wären Behauptungen angemessener.
Wann sollte ich also was tun? Wann ist es angebracht, eine Behauptung zu verwenden und wann ist es angebracht, eine Ausnahme auszulösen?
exceptions
assertions
gablin
quelle
quelle
Antworten:
Behauptungen sollten nur verwendet werden, um Bedingungen zu überprüfen, bei denen es logischerweise unmöglich ist , falsch zu sein. Diese Bedingungen sollten nur auf Eingaben basieren, die von Ihrem eigenen Code generiert wurden. Bei Überprüfungen, die auf externen Eingaben basieren, sollten Ausnahmen verwendet werden.
Eine einfache Regel, die ich befolge, besteht darin, die Argumente privater Funktionen mit Asserts zu überprüfen und Ausnahmen für die Argumente öffentlicher / geschützter Funktionen zu verwenden.
quelle
Assertions werden zum Auffinden von Programmierfehlern verwendet. Ihre Programme müssen genauso gut funktionieren, wenn alle Behauptungen entfernt wurden.
Ausnahmen bestehen hingegen für Situationen, die auch dann auftreten können, wenn das Programm perfekt ist. Sie werden durch äußere Einflüsse wie Hardware, Netzwerk, Benutzer usw. verursacht.
quelle
Typische Programmierpraxis ist das Kompilieren von Behauptungen aus Produktions- / Release-Builds. Behauptungen helfen nur bei internen Tests, das Versagen von Annahmen zu erkennen. Sie sollten nicht das Verhalten externer Agenturen annehmen, also keine Ereignisse vom Netzwerk oder Benutzer auslösen. Es ist auch eine gute Praxis, Handhabungscode für Produktionsbuilds zu schreiben, falls eine Zusicherung fehlschlägt.
Zum Beispiel in C,
Ausnahmen sollen in Produktionsgebäude eingebaut werden. Die Alternative für eine Ausnahme ist die Rückgabe von Fehlern und nicht von Behauptungen.
quelle
Ein Problem mit Asserts ist für mich, dass sie in Java standardmäßig deaktiviert sind.
Wir verwenden eine Fail-First-Strategie, bei der das Programm, das möglicherweise jahrelang unbeaufsichtigt war, so früh wie möglich abstürzen muss, um eine Beschädigung der Daten bei schlechten Daten (in unerwarteter Form) zu vermeiden. Dafür verwenden wir die Prüfung und durch die Verwendung von Zusicherungen riskieren wir grundsätzlich, dass sie nicht aktiv sind.
quelle