Rückgabe boolean anstatt zu deklarieren void-Datentyp in Java?
Gibt es keine harten und schnellen Regeln hinsichtlich der Rückgabe boolescher Wert in einer Methode, die Unterschrift zur Bestätigung einer erfolgreichen Bedienung im Gegensatz zu deklarieren void? Ich finde, dass weitere kritische Vorgänge in meinem aufrufenden Methode, die ich möchte wissen, ob eine operation abgeschlossen, so kann ich die log Probleme. Ist dies eine "unangemessene" Verwendung von booleschen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Normalerweise verwende ich
Exception
s, um zu signalisieren, wenn etwas schief ging.Anstatt
false
können Siethrow
eineException
mit einer ausführlichen Meldung über das, was das problem war.Rückkehr
false
nicht geben Ihnen viel information über das problem.Dann, anstelle der überprüfung für eine
false
Rückgabewert, setzen Sie einfach den Methodenaufruf intry
/catch
wenn Sie erwarten, dass die Methode könnte leicht scheitern.Viele Leute beschweren sich, dass diese Methode langsamer ist. Aber die Vorteile, die Sie gewinnen stark überwiegen die Verlangsamung. Außerdem, wenn Sie mit Java die Geschwindigkeit sollte nicht Ihre #1 Anliegen.
Ich generell finde, dass das auslösen einer exception im Falle eines Fehlers ist eine weit bessere Lösung als Rückgabe ein boolean, weil in der Regel nicht zu kümmern, wenn der Prozess gelungen ist - ich habe nur Sorge, wenn es gescheitert ist. Durch die Verwendung einer exception kann ich jede Menge Informationen darüber, warum der Prozess ausgefallen ist.
Wenn Ausnahmen scheinen geschmacklos, zurück können Sie einen benutzerdefinierten Status-Objekt, das enthält einen booleschen Wert und ein status-Meldung (so etwas wie "Added 6 new Foobars!" oder "Konnte nicht fügen Sie Foobars weil die Foobin ist voll!"), obwohl, das ist natürlich komplexer.
Tun Sie dies nur in Fällen, wo es ist klar, dass etwas mit einem booleschen Ergebnis. Wie
IsValidCustomer()
oder so.Für alle anderen Dinge, wo man denke Sie sich vorstellen könnte, es bedeutet wahrscheinlich, dass Sie ' re Umgang mit irgendeiner Art von
Exception
, und Sie wirklich nicht wollen, zu wickeln, die mit einem einfachen booleantrue/false
, weil Sie können eine Vielzahl von Aromen (unterschiedliche Ausnahmen) und die Gründe, warum etwas schief geht, was würden Sie wissen wollen.Also entweder lassen die Ausnahme Blase in den stack, oder fangen Sie es und schalten Sie ihn in eine eigene exception oder log oder was auch immer.
Verwenden Sie Boolesche Werte, die anzeigen, nicht-zufällige Fehler Ergebnisse. Ein Beispiel wäre die Suche-Funktion. Der Nominale Fehler würde nicht gefunden. Die Kommunikation, das Ergebnis mit Ausnahmen sperrig ist. Sparen Ausnahmen bei außergewöhnlichen Fällen; der Unterschied zwischen nicht gefunden und nicht-Suche.
Dies ist ein ok-Paradigma, aber wenn Sie erzwingen möchten, dass der Anrufer den Fall behandeln, wehre der Vorgang nicht erfolgreich abgeschlossen wurde, möchten Sie vielleicht werfen einer checked exception statt.
Dieses Muster kommt in der core-Java-Bibliotheken, die, obwohl. Sehen Datei.löschen() als Beispiel.
Für die Rücksendung Erfolg in der Regel, was Sie sehen, ist:
Kann nicht sehen, nichts falsch mit der Rückgabe ein boolean für den Erfolg, es sei denn, Sie müssten Informationen über Ausnahme-Verhalten.
Wenn es ein unerwartetes Ergebnis, eine exception zu werfen.
Wenn Sie wollen einfach nur die Funktion, zu sagen, Sie "habe ich X zu tun" dann ist es ein boolean zurückgibt.
In der Praxis, finde ich, dass eine Ausnahme zu werfen ist das beste, was zu tun ist, wenn Fehler bedeutet, dass wir brauchen, um den Vorgang abzubrechen. Wie, wenn Sie versuchen, eine Bestellung -- Rechnung der AUFTRAGGEBER, organisieren den Versand, zahlen Umsatzsteuer, etc -- wenn Sie nicht finden können, die Bestellung aufnehmen, gibt es wahrscheinlich wenig Sinn machen würde, alle anderen arbeiten. Sie wollen einfach nur noch raus. Ausnahmen können Sie dies leicht tun. Gerade fangen Sie an der Unterseite des Blocks, anzeigen oder melden Sie den Fehler, und raus.
Auf der anderen Seite, wenn ein "Fehler" bedeutet, dass mein Programm nimmt einen anderen flow-path -, Rückgabe eines boolean-macht mehr Sinn. Wie, wenn ich mich für einen bestimmten Kunden, und wenn er vorhanden ist, update ich seine Platte und wenn er nicht erstelle ich einen neuen Kunden-Datensatz, dann macht es sehr viel Sinn, um einen booleschen Wert zurückzugeben, und im caller-testen Sie es, und wenn es true ist, Folgen einem Pfad und bei false die andere.
Wirklich zwei sehr verschiedene Bedeutungen des Wortes "Fehler", und Sie erfordern unterschiedliche Behandlung. Es ist durchaus möglich, dass die gleiche Funktion könnte beides tun. Wie, auf gefunden return true, nicht gefunden return false, I/O-Fehler beim Versuch zu Lesen, eine exception zu werfen.
Scheint es ok, aber der Teufel liegt in den details. 😉
Werfen eine Ausnahme ist die wichtigste alternative, mit vor-und Nachteilen.
Ich denke, Sie könnte mehr Einblick durch eine präzise Codierung Proben...