Continuo a sentire le persone parlare di come tipi di riferimento non annullabili possano risolvere così tanti bug e rendere la programmazione molto più semplice. Anche il creatore di null lo chiama il suo billion dollar mistake e Spec# ha introdotto tipi non annullabili per ovviare a questo problema.Discussione sui tipi non annullabili
MODIFICA: Ignora il mio commento su SpeC#. Ho frainteso come funziona.
EDIT 2: devo essere parlando con le persone sbagliate, speravo davvero che qualcuno discutere con :-)
Quindi direi, essendo in minoranza, che ho torto, ma non riesco a capire perché questo dibattito abbia qualche merito. Vedo null come strumento di individuazione dei bug. Considera quanto segue:
class Class { ... }
void main() {
Class c = nullptr;
// ... ... ... code ...
for(int i = 0; i < c.count; ++i) { ... }
}
BAM! Violazione di accesso. Qualcuno ha dimenticato di inizializzare c
.
Ora considerare questo:
class Class { ... }
void main() {
Class c = new Class(); // set to new Class() by default
// ... ... ... code ...
for(int i = 0; i < c.count; ++i) { ... }
}
Ops. Il ciclo viene saltato silenziosamente. Potrebbe volerci un po 'per rintracciare il problema.
Se la classe è vuota, il codice fallirà comunque. Perché il sistema non ti dice (anche se un po 'bruscamente) invece di doverlo scoprire da solo?
È bello vedere gli altri divertirsi, sono ancora a scuola, quindi presumo che ci sia qualcosa che mi manca. –
Esistono altri metodi di principio per gestire "nessun valore". NULL esclude i tipi primitivi, come int. È meglio per un sistema di tipi rappresentare la mancanza di valore in modo coerente su tutti i tipi, invece che solo implicitamente per i riferimenti. Vedi i tipi di "Opzione" di Haskell "Forse" e ML/OCaml/F # per vedere come dovrebbe essere fatto. – MichaelGG
possibile duplicato di [Migliore spiegazione per le lingue senza null] (http://stackoverflow.com/questions/3989264/best-explanation-for-languages-without-null) – nawfal