Ich habe über die (Un) Bequemlichkeit gelesen, null
statt (zum Beispiel) zu haben Maybe
. Nachdem ich diesen Artikel gelesen habe , bin ich überzeugt, dass es viel besser wäre, ihn zu verwendenMaybe
(oder etwas Ähnliches). Ich bin jedoch überrascht zu sehen, dass alle "bekannten" imperativen oder objektorientierten Programmiersprachen weiterhin verwenden null
(was den ungeprüften Zugriff auf Typen ermöglicht, die einen Wert "nichts" darstellen können) und dass dies Maybe
hauptsächlich in funktionalen Programmiersprachen verwendet wird.
Betrachten Sie als Beispiel den folgenden C # -Code:
void doSomething(string username)
{
// Check that username is not null
// Do something
}
Hier riecht etwas schlecht ... Warum sollten wir prüfen, ob das Argument null ist? Sollten wir nicht annehmen, dass jede Variable einen Verweis auf ein Objekt enthält? Wie Sie sehen, besteht das Problem darin, dass per Definition fast alle Variablen eine Nullreferenz enthalten können. Was wäre, wenn wir entscheiden könnten , welche Variablen "nullbar" sind und welche nicht? Das erspart uns viel Mühe beim Debuggen und Suchen einer "NullReferenceException". Stellen Sie sich vor, dass standardmäßig keine Typen eine Nullreferenz enthalten könnten . Stattdessen würden Sie explizit angeben, dass eine Variable nur dann eine Nullreferenz enthalten kann , wenn Sie sie wirklich benötigen. Das ist die Idee hinter Vielleicht. Wenn Sie eine Funktion haben, die in einigen Fällen fehlschlägt (z. B. Division durch Null), können Sie a zurückgebenMaybe<int>
mit dem ausdrücklichen Hinweis, dass das Ergebnis ein int sein kann, aber auch nichts! Dies ist ein Grund, Vielleicht anstelle von Null zu bevorzugen . Wenn Sie an weiteren Beispielen interessiert sind, empfehle ich Ihnen, diesen Artikel zu lesen .
Die Tatsache ist, dass trotz der Nachteile, die es mit sich bringt, die meisten Typen standardmäßig auf null zu setzen, die meisten OO-Programmiersprachen dies tatsächlich tun. Deshalb frage ich mich über:
- Welche Art von Argumenten würden Sie haben zu implementieren ,
null
anstatt in Ihrer ProgrammierspracheMaybe
? Gibt es überhaupt Gründe oder handelt es sich nur um "historisches Gepäck"?
Bitte stellen Sie sicher, dass Sie den Unterschied zwischen null und Vielleicht verstehen, bevor Sie diese Frage beantworten.
null
es kein Konzept gibt (IIRC Haskell ist ein solches Beispiel).
null
sie schon seit langer Zeit vorkommen. Es ist nicht einfach, das einfach fallen zu lassen.