Ich benutze die Java-Sprache, ich habe eine Methode, die ein Objekt zurückgeben soll, wenn es gefunden wird.
Wenn es nicht gefunden wird, sollte ich:
- null zurückgeben
- eine Ausnahme werfen
- anderes
Was ist die beste Praxis oder das beste Idiom?
Ich benutze die Java-Sprache, ich habe eine Methode, die ein Objekt zurückgeben soll, wenn es gefunden wird.
Wenn es nicht gefunden wird, sollte ich:
Was ist die beste Praxis oder das beste Idiom?
Wenn Sie immer erwarten, einen Wert zu finden, werfen Sie die Ausnahme, wenn er fehlt. Die Ausnahme würde bedeuten, dass es ein Problem gab.
Wenn der Wert fehlen oder vorhanden sein kann und beides gültig für die Anwendungslogik ist, geben Sie null zurück.
Wichtiger: Was tun Sie an anderen Stellen im Code? Konsistenz ist wichtig.
Als Faustregel gilt: Wenn die Methode immer ein Objekt zurückgeben soll, dann wähle die Ausnahme. Wenn du gelegentlich mit Nullwerten rechnest und diese auf eine bestimmte Weise behandeln möchtest, wähle Null.
Was auch immer du tust, ich rate dringend von der dritten Option ab: Eine Zeichenfolge zurückzugeben, die "WTF" sagt.
Wenn null niemals einen Fehler anzeigt, dann einfach null zurückgeben.
Wenn null immer ein Fehler ist, dann wirf eine Ausnahme.
Wenn null manchmal eine Ausnahme ist, dann codiere zwei Routinen. Eine Routine wirft eine Ausnahme und die andere ist eine boolesche Testroutine, die das Objekt in einem Ausgabeparameter zurückgibt und false zurückgibt, wenn das Objekt nicht gefunden wurde.
Es ist schwer, eine Try-Routine falsch zu verwenden. Es ist wirklich einfach, darauf zu vergessen, null zu überprüfen.
Also, wenn null ein Fehler ist, schreib einfach
object o = FindObject();
Wenn das Null kein Fehler ist, kannst du etwas wie folgt codieren
if (TryFindObject(out object o)
// Etwas mit o machen
else
// o wurde nicht gefunden
Ich wollte nur die zuvor genannten Optionen zusammenfassen und einige neue hinzufügen:
Oder Sie können diese Optionen kombinieren:
Bieten Sie mehrere überladene Versionen Ihres Getters an, damit der Aufrufer entscheiden kann, welchen Weg er gehen möchte. In den meisten Fällen hat nur die erste Implementierung des Suchalgorithmus, und die anderen umschließen nur die erste:
Object findObjectOrNull(String Schlüssel);
Object findObjectOrThrow(String Schlüssel) wirft SomeException;
Object findObjectOrCreate(String Schlüssel, SomeClass DatenZurErstellungDesNeuenObjekts);
Object findObjectOrDefault(String Schlüssel, Object Standardrückgabewert);
Auch wenn Sie sich entscheiden, nur eine Implementierung anzubieten, möchten Sie möglicherweise eine Namenskonvention wie diese verwenden, um Ihren Vertrag zu klären. Es hilft Ihnen, falls Sie sich jemals entscheiden sollten, weitere Implementierungen hinzuzufügen.
Sie sollten es nicht überstrapazieren, aber es kann hilfreich sein, insbesondere wenn Sie eine Hilfsklasse schreiben, die Sie in Hunderten von verschiedenen Anwendungen mit vielen verschiedenen Fehlerbehandlungskonventionen verwenden werden.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
65 Stimmen
Was auch immer du tust, stelle sicher, dass du es dokumentierst. Ich denke, dieser Punkt ist wichtiger als die genaue Methode, die "am besten" ist.
7 Stimmen
Dies hängt von den vorherrschenden Idiomen der Programmiersprache ab. Bitte taggen Sie diese Frage mit einem Programmiersprachen-Tag.
4 Stimmen
Das Zurückgeben von null kann nur Erfolg oder Misserfolg bedeuten, was oft nicht viel Information ist (manche Methoden können auf viele Arten fehlschlagen). Libraries sollten lieber Ausnahmen werfen, um Fehler explizit zu machen und auf diese Weise kann das Hauptprogramm entscheiden, wie der Fehler auf einer höheren Ebene zu behandeln ist (im Gegensatz zur integrierten Fehlerbehandlungslogik).
5 Stimmen
Es scheint mir, dass die eigentliche Frage, die gestellt wird, ist, ob wir es für außergewöhnlich halten sollten, wenn eine Entität nicht gefunden wird, und wenn ja, warum? Niemand hat wirklich ausreichend beantwortet, wie man zu diesem Schluss kommt, und jetzt ist die Frage-und-Antwort-Runde geschlossen. Es ist wirklich schade, dass die Branche sich nicht auf dieses wichtige Thema geeinigt hat. Ja, ich weiß, es kommt darauf an. Also erkläre, warum es darauf ankommt, mit mehr als "wenn außergewöhnlich, wirf".