Ich glaube, der Grund für die Verwendung von Null und Null ist, dass ersteres in erster Linie ein Substantiv und letzteres in erster Linie ein Adjektiv ist (ich habe es im Internet und in meinem Tagebuch nachgeschlagen: American Heritage 1992).
In Bezug auf Bedeutung und Geschichte ist NIL eine Kontraktion aus dem Lateinischen "nihil", was "nichts" bedeutet.
Meines Wissens wurde die Verwendung des Namens nil
zur Bezeichnung eines Nullzeigers mit der Programmiersprache Lisp (1958) eingeführt.
Ein Nullzeiger ist ein Zeigerwert, der auf nichts zeigen soll und daher nicht dereferenziert werden sollte. In den meisten Fällen sind Zeiger einfach Speicheradressen. Jede Variable (dh jeder Ort), der einen solchen Zeiger enthalten soll, enthält immer eine Konfiguration von Bits, und jede solche Konfiguration kann als Speicheradresse gelesen werden. Daher ist es häufig der Fall, dass der Wert nil
die Adresse eines Speicherbereichs ist, der für das Programm verboten ist, wodurch eine Art von Fehler (möglicherweise eine Unterbrechung) verursacht wird, wenn das Programm versucht, eine Dereferenzierung durchzuführen nil
, was nur ein Fehler sein kann.
Das Vorhandensein eines eindeutigen vordefinierten Standardwerts für diese Rolle ist in Sprachen unbedingt erforderlich, in denen Zeiger explizit verwendet werden, da es wichtig ist, testen zu können, ob ein Zeiger tatsächlich auf einen Speicherort verweist oder nicht. Typischerweise wurde in Lisp eine Liste als Folge von "cons" -Paaren erstellt, die einen "car" -Zeiger auf ein Listenelement und einen "cdr" -Zeiger auf das nächste Paar enthielten. Im letzten Listenpaar war der zweite Zeiger nil
.
Dies entspricht der rekursiven Definition einer Liste als leere Liste oder als mit einer Liste verkettetes Listenelement. Daher wurde eine Liste ohne Element durch dargestellt nil
. Diese leere Liste ist zufällig die Identität des Listenmonoids.
Da Listen zur Darstellung von Mengen verwendet werden können, kann die leere Menge in diesem Fall auch durch dargestellt werden nil
.
Dies nil
war historisch gesehen ein spezieller Zeigerwert, wurde jedoch als spezieller Identitätswert für andere abstraktere Bereiche wie Listen oder Mengen verstanden.
Ein Zeiger gleich nil
war ein Nullzeiger, wobei Null eher ein Adjektiv als ein Substantiv (dh ein Substantiv) ist.
Die koordinierte Verwendung von beiden Wörtern als Adjektiv und Substantiv steht im Einklang mit anderen Praktiken. Das Qualifikationsmerkmal null wird häufig für die Null einer algebraischen Struktur verwendet, beispielsweise für die Identität eines Monoids: das Null-Element . Listen bilden ein Monoid , wobei der Wert nil die Identität ist. Gleiches gilt für Mengen (obwohl sie eine Algebra mit viel mehr Eigenschaften bilden). Man sagt ähnlich, dass eine ganze Zahl null ist, wenn sie null ist.
Es gibt viele Variationen bei der Verwendung dieser und anderer Wörter, wie z. B. keine, abhängig von den Autoren und Besonderheiten der Programmiersprachen.
Die beiden wichtigsten Konnotationen lauten wie oben erläutert
als Standard "undefinierter Wert", der tatsächlich das Fehlen eines verwendbaren Werts darstellt.
als Identitätswert einer Domain
Dies zeigt, dass es nicht ganz richtig ist, zu behaupten, dass NIL " ein Wert ist, der die" Abwesenheit eines Wertes "darstellt, wie dies Gilles in der akzeptierten Antwort getan hat . Das hängt von der Sprache und ihren Verwendungszwecken ab. Die Programmiersprache LISP hat NIL wahrscheinlich vor 55 Jahren in die Programmierterminologie aufgenommen. In LISP NIL
ist die leere Liste und kann äquivalent notiert werden, ()
was die natürliche Darstellung der leeren Liste ist.Es stellt nicht das Fehlen eines Wertes dar. Es wird manchmal als Platzhalter für fehlende Werte verwendet. Dies ist jedoch häufig zu vermeiden, da es sich bei der leeren Liste um einen Wert handelt. Was für einen fehlenden Wert in einer Struktur in einem beliebigen, vom Programmierer ausgewählten Objekt steht, kann nicht mit akzeptablen Werten verwechselt werden.
Die beiden Konzepte sind ziemlich unterschiedlich, obwohl wir oben gezeigt haben, dass sie zusammenhängen können. Es könnte interessant sein, eine detaillierte Taxonomie der Verwendung der von Gilles'answer aufgezählten Terminologie zu haben, um zu sehen, ob die Verwendung jedes dieser Wörter mehr auf die eine oder die andere Konnotation ausgerichtet ist.
Namen sind nicht mehr als das, was sie in einem bestimmten Kontext bedeuten, von wem auch immer der Diskurs definiert wird. Einige Verwendungen sind häufiger, natürlicher oder konsistenter, aber man sollte immer nach Definitionen suchen und sicherstellen, welche Bedeutung in jedem Kontext beabsichtigt war. Und man sollte nicht immer erwarten, dass die Terminologie mit Geschmack oder Beständigkeit gewählt wurde.
NULL
(für C-Kompatibilität) als auchnil
; Aufrufen von Methodennil
ist ein No-Op. JavaScript hat sowohlnull
(ein Wert, der nichts darstellt) als auchundefined
(der Wert ist nicht einmal festgelegt).