Was ist die richtige Fehlermeldung an Google Guava der Voraussetzungen. * Methoden zu liefern?
-
30-09-2019 - |
Frage
Zum Beispiel bei der Verwendung von
Lösung Für Voraussetzung Kontrollen unter Angabe der Anforderung in der Ausnahme Detailmeldung ist informativer als einfach die Tatsachen erklärt. Es führt auch zu einem viel mehr natürlich Codelese: Die Dokumentation folgendes Beispiel vor: Dies ermöglicht Konstrukte wie mit den kompakteren Zwei Dinge sind zu erwähnen: Im Anschluss an diesem Beispiel eine bessere Nachricht wäre: Sie können sogar noch einen Schritt weiter und erfassen die Werte von Die Alternative Tatsachen der besagt, ist weniger natürlich in Code zu lesen: Beachten Sie, wie umständlich es in Java-Code einen boolean Ausdruck zu lesen ist, gefolgt von einem String das widerspricht, dass die Expression. Ein weiterer Nachteil ist, dass der besagt, Fakten für komplizierte Voraussetzungen, es ist potentiell weniger informativ, da der Benutzer bereits die Tatsache wissen kann, aber nicht das, was die tatsächlichen Anforderungen, die verletzt wird.
if (count <= 0) {
throw new IllegalArgumentException("must be positive: " + count);
}
checkArgument(count > 0, "must be positive: %s", count);
checkArgument(a == b, "a must be equal to b"); // natural!
a
und b
in der Ausnahmemeldung gehen (siehe Effective Java 2nd Edition, Punkt 63: Fügen Sie Fehlererfassungs Informationen im Detail Nachrichten ): checkArgument(a == b, "a must be equal to b; instead %s != %s", a, b);
checkArgument(a == b, "a != b"); // awkward!
checkArgument(a == b, "a is not equal to b"); // awkward!
Verwandte Fragen
Andere Tipps
Die Dokumentation gibt Beispiele, die es sehr deutlich machen Wörter anstelle von Symbolen:
checkArgument(count > 0, "must be positive: %s", count);
Da diese sind im Grunde nur gehen Ausnahmemeldungen in Protokollen (oder Debug-Sitzungen) sein, tun, was Sie denken, wird es klarste jedem an Problem suchen, oder jemand liest den Code der Voraussetzung zu verstehen.
Zum Beispiel, Sie könnte schreiben die oben als:
checkArgument(count > 0, "count must be positive; was actually %s", count);
persönlich für so etwas denke ich, ich schreibe würde
checkArgument(a == b, "a (%s) must equal b (%s)", a, b);
Oft (die meiste Zeit) Sie können nur die Verwendung checkArgument () Methode ohne die Fehlermeldung Parameter, das heißt, nicht die Fehlermeldung an alle zu liefern.
Um eine gute Fehlermeldung braucht man machen zu verstehen, wer die Nachricht gelesen wird. Es ist nicht der Endnutzer; wenn die Voraussetzung nicht zeigt es höchstwahrscheinlich einen Fehler im Code. Der Text kann die ausgefallene Voraussetzung erklären, aber in den meisten Fällen ist es von keinerlei Nutzen für den Endverbraucher wird angenommen, ein Hinweis für den Programmierer sein. Die meiste Zeit, die Nachricht selbst macht auch keinen Sinn, ohne Stacktrace und Quellcode. In der Tat, in den meisten Fällen ein Stacktrace und Quellcode ist genau das, was ein Programmierer einen Fehler beheben muss, hat die Fehlermeldung nicht helfen. Wenn die Voraussetzung nicht offensichtlich ist, um es ein Kommentar nächstes ist ein perfekter Weg, es zu dokumentieren.
Die Notwendigkeit, immer eine Fehlermeldung in Fällen niemand wirklich kümmert sich um die Text führt zu Programmierer machen nutzlos, offensichtlich und nicht hilfreich Nachrichten liefern, die nur der Code weniger lesbar macht.
Es gibt einige Fälle, wenn eine Fehlermeldung kann nützlich sein, zum Beispiel der Nachricht, die die aktuellen Werte von Variablen enthalten, aber von unserer Erfahrung das ist nicht sehr oft, und in diesen Fällen können Sie die Nachricht verwenden.
ähnliche Argumente gelten auch in den assert Methoden in JUnit; immer eine Fehlermeldung bereitstellt, ist keine gute Idee.
Auch wenn Sie Voraussetzungen in einer Bibliothek verwenden, anstatt eine Anwendung für Endanwender, könnte es auch anders sein, da Sie nicht wissen, wie Ihr Code verwendet werden.
Wie polygenelubricants wies darauf hin:
Für Voraussetzung Kontrollen unter Angabe der Anforderung in der Ausnahmedetailmeldung ist informativer als einfach die Fakten unter Angabe.
Während Sie dies sicherlich mit Guava Voraussetzungen tun können, Anforderungen API (die ich verfasst) ermöglicht es Ihnen, bessere Ausgabe auf Ihrer Seite ohne Anstrengung zu erreichen.
Guava Voraussetzungen
String a = "foosball";
String b = "ballroom";
Preconditions.checkArgument(a == b, "a == b");
gibt Ihnen diese:
java.lang.IllegalArgumentException: a == b
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:122)
at Main.main(Main.java:142)
Anforderungen API
String a = "foosball";
String b = "ballroom";
requireThat(a, "a").isEqualTo(b, "b")
gibt Ihnen diese:
Das gleiche Eingang, eine bessere Ausgabe.
(Wenn Ihr Terminal keine Farben unterstützt, erhalten Sie eine Text diff statt)