La semana pasada, tuvimos un acalorado argumento sobre el manejo de nulos en la capa de servicio de nuestra aplicación. La pregunta está en el contexto de .NET, pero será la misma en Java y en muchas otras tecnologías.
La pregunta era: ¿debería verificar siempre los nulos y hacer que su código funcione sin importar qué, o dejar que se produzca una excepción cuando se recibe un nulo inesperadamente?
Por un lado, comprobar si hay un valor nulo en el que no lo esperas (es decir, no tengo una interfaz de usuario para manejarlo) es, en mi opinión, lo mismo que escribir un bloque try con un retén vacío. Estás ocultando un error. El error podría ser que algo haya cambiado en el código y que el valor nulo sea ahora un valor esperado, o que haya algún otro error y que se haya pasado una identificación incorrecta al método.
Por otro lado, la comprobación de nulos puede ser un buen hábito en general. Además, si hay una verificación, la aplicación puede seguir funcionando, con solo una pequeña parte de la funcionalidad que no tiene ningún efecto. Entonces, el cliente puede informar un error pequeño como "no se puede eliminar el comentario" en lugar de un error mucho más grave como "no se puede abrir la página X".
¿Qué práctica sigues y cuáles son tus argumentos a favor o en contra de cualquiera de los dos enfoques?
Actualización:
Quiero agregar algunos detalles sobre nuestro caso particular. Recuperamos algunos objetos de la base de datos y los procesamos (digamos, construimos una colección). El desarrollador que escribió el código no anticipó que el objeto pudiera ser nulo, por lo que no incluyó ninguna comprobación, y cuando se cargó la página se produjo un error y no se cargó toda la página.
Obviamente, en este caso debería haber habido una verificación. Luego tuvimos una discusión sobre si cada objeto que se procesa debería verificarse, incluso si no se espera que falte, y si el procesamiento final debe abortarse en silencio.
El beneficio hipotético sería que la página continuará funcionando. Piense en los resultados de una búsqueda en Stack Exchange en diferentes grupos (usuarios, comentarios, preguntas). El método puede comprobar si hay un valor nulo y abortar el procesamiento de los usuarios (que debido a un error es nulo), pero devuelve las secciones "comentarios" y "preguntas". La página continuaría trabajando, excepto que faltará la sección "usuarios" (que es un error). ¿Deberíamos fallar antes y romper la página completa o continuar trabajando y esperar a que alguien note que falta la sección "usuarios"?