Credo che la ragione dell'uso sia di zero che di null sia che il primo è principalmente un sostantivo, e il secondo principalmente un aggettivo (ho controllato sul web e nel mio diario di carta: American Heritage 1992).
Per quanto riguarda il significato e la storia, NIL è una contrazione dal latino "nihil" che significa "niente".
Per quanto ne so, l'uso del nome nil
per indicare un puntatore null è stato introdotto con il linguaggio di programmazione Lisp (1958).
Un puntatore nullo è un valore di puntatore che non dovrebbe puntare a nulla e quindi non dovrebbe essere negato. Nella maggior parte dei casi, i puntatori sono semplicemente indirizzi di memoria. Qualsiasi variabile (ovvero qualsiasi posizione) destinata a contenere un tale puntatore conterrà sempre una configurazione di bit e tale configurazione può essere letta come indirizzo di memoria. Quindi spesso accade che il valore nil
sia l'indirizzo di un'area di memoria proibita al programma, causando così una qualche forma di errore (possibilmente interrompendo) se il programma tenta di dereferenziare nil
, che può essere solo un errore.
Avere un valore standard predefinito univoco per svolgere questo ruolo è essenziale nei linguaggi che utilizzano esplicitamente i puntatori, poiché è importante essere in grado di verificare se un puntatore punta o meno a una posizione di memoria o meno. Tipicamente, in Lisp, un elenco è stato creato come una successione di coppie "contro" contenenti un puntatore "auto" a un elemento elenco e un puntatore "cdr" alla coppia successiva. Nell'ultima coppia dell'elenco, il secondo puntatore era nil
.
Ciò corrisponde alla definizione ricorsiva di un elenco come elenco vuoto o elemento di elenco concatenato a un elenco. Quindi un elenco senza elementi era rappresentato da nil
. Questo elenco vuoto sembra essere l'identità del monoid elenco.
Poiché gli elenchi possono essere utilizzati per rappresentare insiemi, anche l'insieme vuoto può essere rappresentato da nil
.
Quindi nil
storicamente era un valore di puntatore speciale, ma veniva compreso come un valore di identità speciale per altri domini più astratti, come elenchi o insiemi.
Un puntatore uguale nil
era un puntatore nullo, essendo null un aggettivo anziché un sostantivo (cioè un sostantivo).
L'uso coordinato di entrambe le parole, come aggettivo e sostantivo è abbastanza coerente con altre pratiche. Il qualificatore null viene spesso utilizzato per lo zero di una struttura algebrica, come l'identità di un monoide: l' elemento null . Gli elenchi formano un monoide , dove il valore zero è l'identità. Lo stesso vale per gli insiemi (sebbene formino un'algebra con molte più proprietà). Uno dice allo stesso modo che un numero intero è nullo quando è zero.
Ci sono molte varianti sull'uso di queste parole e altre, come nessuna, a seconda degli autori e delle idiosincrasie dei linguaggi di programmazione.
Le due principali connotazioni sono , come spiegato sopra
come "valore indefinito" standard, che rappresenta in realtà l'assenza di qualsiasi valore utilizzabile.
come valore di identità di alcuni domini
Ciò dimostra che non è del tutto esatto affermare che NIL è " un valore che rappresenta l '" assenza di un valore ", come fatto da Gilles nella risposta accettata . Dipende dalla lingua e dai suoi usi. Il linguaggio di programmazione LISP probabilmente ha introdotto NIL nella terminologia di programmazione 55 anni fa. In LISP, NIL
è l'elenco vuoto e si può equivalentemente notare ()
quale sia la rappresentazione naturale dell'elenco vuoto.Non rappresenta l'assenza di un valore. A volte viene utilizzato come segnaposto per i valori mancanti, anche se ciò è spesso da evitare proprio perché l'elenco vuoto è un valore. Ciò che rappresenta un valore mancante in una struttura in qualsiasi oggetto arbitrario, scelto dal programmatore, che non può essere confuso con valori accettabili.
I due concetti sono piuttosto diversi, anche se abbiamo dimostrato sopra che possono essere correlati. Potrebbe essere interessante avere una modalità dettagliata di tassonomia dell'uso della terminologia enumerata dalla risposta di Gilles, per vedere se gli usi di ciascuna di queste parole sono più orientati verso una connotazione o l'altra.
I nomi non sono altro che ciò a cui sono assegnati in un determinato contesto, da parte di chi definisce il discorso. Alcuni usi sono più comuni, più naturali o più coerenti, ma si dovrebbe sempre verificare la presenza di definizioni e accertarsi del significato previsto in ciascun contesto. E non bisogna sempre aspettarsi che la terminologia sia stata scelta con gusto o coerenza.
NULL
(per la compatibilità C) enil
; chiamare metodi onnil
è un no-op. JavaScript ha entrambinull
(un valore che non rappresenta nulla) eundefined
(il valore non è nemmeno impostato).