NULL-Referenzen werden nicht "gemieden" als Ausnahmen, zumindest von niemandem, den ich jemals gekannt oder gelesen habe. Ich denke, Sie verstehen die konventionelle Weisheit falsch.
Schlecht ist der Versuch, auf eine Nullreferenz zuzugreifen (oder einen Nullzeiger zu dereferenzieren usw.). Das ist schlecht, weil es immer einen Fehler anzeigt; Sie würde nie so etwas wie dies absichtlich tun, und wenn Sie sind es absichtlich tut, dann ist das noch schlimmer, weil es unmöglich zu unterscheiden , das erwartete Verhalten von Buggy Verhalten bewegt.
Es gibt bestimmte Randgruppen da draußen, die das Konzept der Nichtigkeit aus irgendeinem Grund wirklich hassen, aber wie Ed betont , wenn Sie es nicht haben null
oder nil
dann müssen Sie es einfach durch etwas anderes ersetzen, was zu etwas führen könnte schlimmer als ein Absturz (z. B. Beschädigung von Daten).
Tatsächlich umfassen viele Frameworks beide Konzepte. In .NET ist ein häufiges Muster beispielsweise ein Methodenpaar, dem das Wort Try
(z. B. TryGetValue
) vorangestellt ist . In diesem Try
Fall wird die Referenz (normalerweise null
) auf den Standardwert gesetzt , und in dem anderen Fall wird eine Ausnahme ausgelöst. Bei beiden Ansätzen ist nichts falsch. beide werden häufig in Umgebungen verwendet, die sie unterstützen.
Es hängt wirklich alles von der Semantik ab. Wenn null
es sich um einen gültigen Rückgabewert handelt, wie im allgemeinen Fall der Suche in einer Sammlung, dann geben Sie zurück null
. Wenn es sich jedoch nicht um einen gültigen Rückgabewert handelt, z. B. um das Nachschlagen eines Datensatzes mit einem Primärschlüssel aus Ihrer eigenen Datenbank, ist das Zurückgeben null
eine schlechte Idee, da der Aufrufer dies wahrscheinlich nicht erwartet Ich werde nicht danach suchen.
Es ist wirklich sehr einfach herauszufinden, welche Semantik verwendet werden soll: Ist es sinnvoll, wenn das Ergebnis einer Funktion undefiniert ist? In diesem Fall können Sie eine Nullreferenz zurückgeben. Wenn nicht, eine Ausnahme auslösen.