Patrón de objeto nulo


En la programación informática orientada a objetos , un objeto nulo es un objeto sin valor de referencia o con un comportamiento neutral ( nulo ) definido. El patrón de diseño de objetos nulos , que describe los usos de dichos objetos y su comportamiento (o la falta de ellos), se publicó por primera vez como "Valor vacío" [1] y más tarde en la serie de libros Lenguajes de patrones de diseño de programas como "Objeto nulo". [2] [ año necesario ]

En la mayoría de los lenguajes orientados a objetos, como Java o C# , las referencias pueden ser nulas . Estas referencias deben verificarse para asegurarse de que no sean nulas antes de invocar cualquier método , ya que los métodos normalmente no se pueden invocar en referencias nulas.

El lenguaje Objective-C adopta otro enfoque para este problema y no hace nada al enviar un mensaje a nil; si se espera un valor devuelto, nil(para objetos), 0 (para valores numéricos), NO(para BOOLvalores) o una estructura (para tipos de estructuras) con todos sus miembros inicializados en null/0/ NO/se devuelve una estructura inicializada en cero. [3]

En lugar de utilizar una referencia nula para transmitir la ausencia de un objeto (por ejemplo, un cliente inexistente), se utiliza un objeto que implementa la interfaz esperada , pero cuyo cuerpo de método está vacío. La ventaja de este enfoque sobre una implementación predeterminada funcional es que un objeto nulo es muy predecible y no tiene efectos secundarios: no hace nada .

Por ejemplo, una función puede recuperar una lista de archivos en una carpeta y realizar alguna acción en cada uno. En el caso de una carpeta vacía, una respuesta puede ser lanzar una excepción o devolver una referencia nula en lugar de una lista. Así, el código que espera una lista debe verificar que efectivamente tiene una antes de continuar, lo que puede complicar el diseño.

Al devolver un objeto nulo (es decir, una lista vacía), no hay necesidad de verificar que el valor devuelto sea de hecho una lista. La función de llamada puede simplemente iterar la lista de forma normal, sin hacer nada en la práctica. Sin embargo, todavía es posible verificar si el valor devuelto es un objeto nulo (una lista vacía) y reaccionar de manera diferente si se desea.