Uważam, że powodem użycia zarówno wartości zerowej, jak i zerowej jest to, że ten pierwszy jest rzeczownikiem, a drugi przede wszystkim przymiotnikiem (sprawdziłem w Internecie i w moim papierowym słowniku: American Heritage 1992).
Jeśli chodzi o znaczenie i historię, NIL jest skrótem od łacińskiego „nihil”, co oznacza „nic”.
O ile mi wiadomo, użycie nazwy nil
oznaczającej wskaźnik zerowy zostało wprowadzone w języku programowania Lisp (1958).
Pustego wskaźnika jest wartość wskaźnika, który ma wskazywać na nic, i nie powinno być zatem dereferencjonowane. W większości przypadków wskaźniki to po prostu adresy pamięci. Każda zmienna (tj. Dowolna lokalizacja), która ma zawierać taki wskaźnik, zawsze będzie zawierała pewną konfigurację bitów, a każdą taką konfigurację można odczytać jako adres pamięci. Dlatego często zdarza się, że wartością nil
będzie adres obszaru pamięci, który jest zabroniony dla programu, powodując w ten sposób pewną formę awarii (być może przerwania), jeśli program spróbuje wyrejestrować nil
, co może być tylko błędem.
Posiadanie unikalnej predefiniowanej wartości standardowej do odgrywania tej roli jest niezbędne w językach, w których jawnie używa się wskaźników, ponieważ ważne jest, aby móc przetestować, czy wskaźnik wskazuje na jakąś lokalizację pamięci, czy nie. Zazwyczaj w Lisp lista była budowana jako szereg par „wad” zawierających wskaźnik „samochód” do elementu listy i wskaźnik „cdr” do następnej pary. W ostatniej parze listy drugim wskaźnikiem był nil
.
Odpowiada to rekurencyjnej definicji listy jako pustej listy lub elementu listy połączonego z listą. Stąd lista bez elementu była reprezentowana przez nil
. Ta pusta lista to tożsamość monoidu listy.
Ponieważ listy mogą być używane do reprezentowania zestawów, pusty zestaw może być w tym przypadku również reprezentowany przez nil
.
Tak więc nil
historycznie była to specjalna wartość wskaźnika, ale zaczęła być rozumiana jako specjalna wartość tożsamości dla innych bardziej abstrakcyjnych domen, takich jak listy lub zestawy.
Wskaźnik równy nil
był zerowemu wskaźnikowi, null byłby przymiotnikiem, a nie rzeczownikiem (tj. Rzeczownikiem).
Skoordynowane użycie obu słów jako przymiotnika i rzeczownika jest dość spójne z innymi praktykami. Kwalifikator null jest często używany do zera struktury algebraicznej, takiej jak tożsamość monoidu: element zerowy . Listy tworzą monoid , gdzie wartością zero jest tożsamość. To samo dotyczy zbiorów (choć tworzą one algebrę o wiele innych właściwościach). Mówi się podobnie, że liczba całkowita jest zerowa, gdy wynosi zero.
Istnieje wiele odmian użycia tych słów i innych, takich jak brak, w zależności od autorów i osobliwości języków programowania.
Dwie główne konotacje są , jak wyjaśniono powyżej
jako standardowa „wartość nieokreślona”, faktycznie reprezentująca brak jakiejkolwiek użytecznej wartości.
jako wartość tożsamości niektórych domen
To pokazuje, że twierdzenie, że NIL jest „ wartością, która reprezentuje„ brak wartości ”, nie jest dość dokładne , jak to zrobił Gilles w przyjętej odpowiedzi . To zależy od języka i jego zastosowań. Język programowania LISP prawdopodobnie wprowadził NIL w terminologii programowania 55 lat temu. W LISP, NIL
jest pustą listą, i można w równy sposób zauważyć, ()
która jest naturalną reprezentacją pustej listy.Nie oznacza to braku wartości. Czasami jest używany jako symbol zastępczy dla brakujących wartości, chociaż często tego należy unikać właśnie dlatego, że pusta lista jest wartością. Co oznacza brakującą wartość w strukturze dowolnego dowolnego obiektu wybranego przez programistę, którego nie można pomylić z dopuszczalnymi wartościami.
Te dwie koncepcje są raczej różne, chociaż wykazaliśmy powyżej, że można je ze sobą powiązać. Interesujące może być posiadanie trybu szczegółowej taksonomii użycia terminologii wyliczonej przez Gilles'answer, aby zobaczyć, czy użycie każdego z tych słów jest bardziej ukierunkowane na jedną konotację, czy drugą.
Nazwy nie są niczym więcej niż tym, co mają oznaczać w danym kontekście, przez każdego, kto definiuje dyskurs. Niektóre zastosowania są bardziej powszechne, bardziej naturalne lub bardziej spójne, ale zawsze należy sprawdzać definicje i upewnić się, jakie znaczenie było zamierzone w każdym kontekście. I nie zawsze należy oczekiwać, że terminologia zostanie wybrana ze smakiem lub konsekwencją.
NULL
(zgodność C), jak inil
; wywoływanie metodnil
jest zabronione. JavaScript ma zarównonull
(wartość reprezentującą nic), jak iundefined
(wartość nie jest nawet ustawiona).