Il dilemma
Se una variabile con valore null
viene utilizzata nel tuo programma causando un NullPointerException
, questa è chiaramente una situazione nel tuo programma che non ti aspetti. Devi porsi la domanda: "Non me l'aspettavo perché non ho preso in considerazione la possibilità di un valore null
o ho presunto che il valore non potrebbe mai essere null
qui?"
Se la risposta è la seconda, il problema non è perché non hai gestito il valore null
. Il problema si è verificato in precedenza e stai vedendo solo le conseguenze di tale errore sulla riga in particolare utilizzata. In questo caso, aggiungere semplicemente if (variable != null)
non lo taglierà. Finirai per saltare le righe che dovresti eseguire perché la variabile era null
, e alla fine otterrai una riga più avanti in cui hai assunto nuovamente che non sarebbe null
.
Quando null
deve essere utilizzato
Come regola generale, restituisce null solo quando "assente" è un possibile valore di ritorno. In altre parole, il tuo livello dati può cercare un record con un ID specifico. Se quel record non viene trovato, puoi lanciare un'eccezione o semplicemente restituire null. Puoi fare entrambe le cose, ma preferisco non fare eccezioni in situazioni in cui esiste una strong possibilità. Quindi restituisci null
invece di un valore.
Il chiamante di questo metodo, presumibilmente scritto da te, sa che esiste la possibilità che il record non esista e controlli null
di conseguenza. Non c'è nulla di sbagliato in questo caso, anche se dovresti gestire questa possibilità il prima possibile, altrimenti in ogni parte del tuo programma dovrai affrontare la possibilità di un valore null
.
Conclusione
In altre parole, considera null
come valore legittimo, ma gestiscilo immediatamente anziché attendere. Idealmente nel tuo programma, dovresti sempre controllare se è null
una volta nel tuo programma e solo nel luogo in cui viene gestito tale valore di null
.
Per il valore ogni che ti aspetti di essere non nullo, non devi aggiungere un assegno. Se è null
, accetta che vi sia un errore nel tuo programma quando è stato istanziato. In sostanza, il favore fallisce velocemente in caso di errore sicuro.