La semaine dernière, nous avons eu un débat passionné sur la gestion des valeurs NULL dans la couche de service de notre application. La question se situe dans le contexte .NET, mais ce sera la même chose en Java et dans de nombreuses autres technologies.
La question était: devriez-vous toujours vérifier les nulls et faire fonctionner votre code à tout moment, ou laisser une exception bouillonner quand une null est reçue de manière inattendue?
D'un côté, vérifier la valeur null là où vous ne l'attendez pas (c'est-à-dire ne pas avoir d'interface utilisateur pour la gérer) est, à mon avis, identique à l'écriture d'un bloc try avec un catch vide. Vous ne faites que cacher une erreur. L'erreur peut être que quelque chose a changé dans le code et que null est maintenant une valeur attendue, ou il y a une autre erreur et un ID incorrect est transmis à la méthode.
En revanche, vérifier les valeurs nulles peut être une bonne habitude en général. De plus, s’il ya vérification, l’application peut continuer à fonctionner, seule une petite partie de la fonctionnalité n’ayant aucun effet. Ensuite, le client peut signaler un petit bogue du type "impossible de supprimer un commentaire" au lieu d'un bogue beaucoup plus grave tel que "impossible d'ouvrir la page X".
Quelle pratique suivez-vous et quels sont vos arguments pour ou contre l'une ou l'autre approche?
Mise à jour:
Je veux ajouter quelques détails sur notre cas particulier. Nous avons récupéré des objets de la base de données et les avons traités (construisons une collection, par exemple). Le développeur qui a écrit le code n'a pas prévu que l'objet puisse être null et n'a donc inclus aucune vérification. Lors du chargement de la page, une erreur s'est produite et la totalité de la page n'a pas été chargée.
Évidemment, dans ce cas, il aurait dû y avoir un contrôle. Nous nous sommes ensuite demandé si tous les objets traités devaient être vérifiés, même s'ils ne devaient pas être manquants, et si le traitement éventuel devait être interrompu en mode silencieux.
L'avantage hypothétique serait que la page continuera à fonctionner. Pensez à des résultats de recherche sur Stack Exchange dans différents groupes (utilisateurs, commentaires, questions). La méthode pourrait vérifier la valeur null et abandonner le traitement des utilisateurs (ce qui, en raison d'un bogue, a la valeur null), mais renvoyer les sections "comments" et "questions". La page continuerait à fonctionner sauf que la section "utilisateurs" serait manquante (ce qui est un bogue). Devrions-nous échouer tôt et casser toute la page ou continuer à travailler et attendre que quelqu'un remarque la section "utilisateurs" manquante?
assert(foo != null, "foo is web control within the repeater, there's no reason to expect it to be null, etc, etc...");