# NULL

In diversi contesti dell'informatica e della matematica, la parola null o anche meno frequentemente nil viene usata per indicare un particolare elemento di un insieme che svolge, in qualche senso, una funzione simile a quella dello zero matematico. Il termine deriva dal latino nullus e viene talvolta reso in italiano con nullo; in altre occasioni, con riferimento esplicito alla sintassi di specifici linguaggi formali (per esempio linguaggi di programmazione), il termine viene anche riportato come NULL, con tutte le lettere maiuscole.

## Dallo zero al null

Nei sistemi di numerazione convenzionali, la cifra zero ha la caratteristica eccezionale di non rappresentare alcun valore di quantità; lo si può descrivere come una "cifra vuota".
Storicamente, la necessità di disporre di uno zero nacque nei sistema di numerazione posizionali; lo zero ha infatti la funzione peculiare (rispetto alle altre cifre) di agire solo sul sistema delle posizioni. Nel numero "300", per esempio, i due zeri finali influiscono solo sulla posizione del "3" (consentendo di interpretarlo come 3 centinaia), ma non rappresentano quantità parziali significative per la valutazione del numero complessivo; diversamente accade, per esempio, per i due "1" finali di "311".
In modo analogo, il "null" compare in molti linguaggi formali laddove è necessario un valore per riempire una certa "posizione" (in senso ampio) ma in realtà la posizione deve essere riempita con un valore "vuoto", un puro segnaposto che non descrive nessun valore significativo o utilizzabile. (In tedesco e in norvegese, tra l'altro, la parola "null" significa "zero").

## Il null in programmazione

In programmazione, NULL o null è un valore speciale dei tipi puntatore (o riferimento), che rappresentano (a diversi livelli di astrazione) indirizzi di memoria di strutture dati. In questo contesto, il valore speciale "null" viene usato per indicare che il puntatore non contiene l'indirizzo di memoria di alcuna struttura dati. Spesso, il valore di null coincide con lo 0 numerico, poiché l'indirizzo di memoria "0" è un indirizzo inaccessibile in quasi tutti i sistemi operativi. Tuttavia, alcuni linguaggi di programmazione adottano convenzioni diverse e molti lasciano alle implementazioni di compilatori o interpreti la libertà di fare coincidere o meno i due valori. In quest'ultimo caso, al programmatore si suggerisce di distinguere comunque lo zero dal null che sarà rappresentato tipicamente da una parola chiave del linguaggio o da una macro come il NULL del C, al fine di preservare la portabilità del codice sorgente.
In altri casi null viene utilizzato per descrivere un valore "sconosciuto", "indefinito" o assente di una variabile. In SQL, per esempio, un certo campo potrebbe assumere un valore "definito", oppure il valore speciale NULL, che indica che tale valore non è conosciuto. Vi è un dibattito a livello accademico fra chi sostiene che NULL dovrebbe indicare un valore sconosciuto e chi sostiene che dovrebbe indicare l'assenza di un valore. In pratica quando si legge il valore corrente di una colonna a 0 si può avere un NULL che significa "il valore del campo non è noto", ma che può essere anche interpretato come "il campo è vuoto"; quando invece viene valutata una qualsiasi espressione che coinvolge anche un solo campo NULL ciò che si ottiene alla fine è ancora NULL, indipendentemente dal tipo di espressione e questo ben si associa col significato di indefinito (es.: la somma di un numero qualsiasi con un numero indefinito dà sempre un risultato indefinito).
Nel tempo, per ovviare ai problemi nati a causa dei puntatori nulli che non venivano gestiti in modo corretto, sono nati vari linguaggi che implementano la void safety o null safety per ovviare a questo problema. Questi linguaggi infatti prevedono dei meccanismi che permettono al compilatore già a compile-time di notare quando un oggetto è null e impedire che venga acceduto in modo non sicuro. Portando a una notevole riduzione dei bug dovuti a questa problematica.