La scorsa settimana abbiamo discusso a fondo della gestione dei null nel livello di servizio della nostra applicazione. La domanda è nel contesto .NET, ma sarà la stessa in Java e in molte altre tecnologie.
La domanda era: dovresti sempre verificare la presenza di valori null e far funzionare il tuo codice in ogni caso, oppure lasciare che un'eccezione compaia quando un null viene ricevuto inaspettatamente?
Da un lato, verificare la presenza di null nel punto in cui non ci si aspetta (ovvero non avere un'interfaccia utente per gestirlo) è, a mio avviso, lo stesso di scrivere un blocco try con catch vuoto. Stai nascondendo un errore. L'errore potrebbe essere che qualcosa è cambiato nel codice e null è ora un valore previsto, oppure c'è qualche altro errore e l'ID errato viene passato al metodo.
D'altra parte, verificare la presenza di null può essere una buona abitudine in generale. Inoltre, se è presente un controllo, l'applicazione potrebbe continuare a funzionare, con solo una piccola parte della funzionalità che non ha alcun effetto. Quindi il cliente potrebbe segnalare un piccolo bug come "impossibile eliminare il commento" invece di un bug molto più grave come "impossibile aprire la pagina X".
Quale pratica segui e quali sono i tuoi argomenti a favore o contro entrambi gli approcci?
Aggiornare:
Voglio aggiungere alcuni dettagli sul nostro caso particolare. Stavamo recuperando alcuni oggetti dal database e ne abbiamo elaborato alcuni (diciamo, costruiamo una raccolta). Lo sviluppatore che ha scritto il codice non ha previsto che l'oggetto potesse essere nullo, quindi non ha incluso alcun controllo e quando la pagina è stata caricata si è verificato un errore e l'intera pagina non è stata caricata.
Ovviamente, in questo caso avrebbe dovuto esserci un controllo. Quindi abbiamo discusso sul fatto che ogni oggetto che viene elaborato debba essere verificato, anche se non è previsto che manchi, e se l'eventuale elaborazione debba essere interrotta silenziosamente.
Il vantaggio ipotetico sarebbe che la pagina continuerà a funzionare. Pensa ai risultati di una ricerca su Stack Exchange in diversi gruppi (utenti, commenti, domande). Il metodo potrebbe controllare null e interrompere l'elaborazione degli utenti (che a causa di un bug è null) ma restituire le sezioni "commenti" e "domande". La pagina continuerà a funzionare tranne per il fatto che la sezione "utenti" mancherà (che è un bug). Dovremmo fallire presto e interrompere l'intera pagina o continuare a lavorare e attendere che qualcuno noti che manca la sezione "utenti"?
assert(foo != null, "foo is web control within the repeater, there's no reason to expect it to be null, etc, etc...");