Tony Hoare, che ha creato l'idea di un riferimento null in primo luogo, lo chiama il suo errore da un milione di dollari .
Il problema non riguarda i riferimenti null di per sé, ma la mancanza di un corretto controllo dei tipi nella maggior parte (altrimenti) digita i linguaggi sicuri.
Questa mancanza di supporto, dal linguaggio, significa che i bug "null-bug" potrebbero essere in agguato nel programma per molto tempo prima di essere rilevati. Questa è la natura dei bug, ovviamente, ma i "null bug" ora sono noti per essere evitabili.
Questo problema è particolarmente presente in C o C ++ (ad esempio) a causa dell'errore "difficile" che causa (un arresto anomalo del programma, immediato, senza un recupero elegante).
In altre lingue, c'è sempre la domanda su come gestirli.
In Java o C # si otterrebbe un'eccezione se si tenta di invocare un metodo su un riferimento null e potrebbe essere corretto. E quindi la maggior parte dei programmatori Java o C # sono abituati a questo e non capiscono perché si vorrebbe fare altrimenti (e ridere di C ++).
In Haskell, devi esplicitamente fornire un'azione per il caso nullo, e quindi i programmatori di Haskell si lamentano dei loro colleghi, perché hanno capito bene (giusto?).
È, in realtà, il vecchio dibattito sui codici di errore / eccezione, ma questa volta con un Valore Sentinel al posto del codice di errore.
Come sempre, ciò che è più appropriato dipende molto dalla situazione e dalla semantica che stai cercando.