En Computación, el antipatrón de diseño Zero means null o Valor por defecto como indefinido ocurre cuando en una aplicación o en una base de datos se admite sin verificar que un valor nunca va a ocurrir y por tanto puede usarse para indicar la ausencia de valor.[1]
La primera opción a tomar, es utilizar, si existe, en el sistema gestor de bases de datos o lenguaje de desarrollo una representación para el valor nulo. De no existir, profundizar en la especificación de la aplicación para asegurarse que existe algún valor que pertenezca al tipo de datos pero no al dominio de los datos y tomar como nulo alguno de esos valores. Finalmente, de no existir un valor utilizable como indefinido, ampliar la representación para indicar, por ejemplo con un valor booleano, cuando el campo está definido.
Ejemplos
- Un diseñador de aplicaciones imagina que nadie hará un reporte desde las coordenadas 0,0 por lo que al par 0,0 le da el significado de no se conocen las coordenadas.
- Un usuario se queja porque cada vez que dibuja los meridianos, hay uno que siempre falta.
Resulta más común de lo imaginado que aplicaciones tomen valores particulares para representar el valor indefinido, por ejemplo -1 al suponer que nunca los valores serán negativos o una de los textos "", "(nulo)", "XXXX", etc. para representar un texto indefinido.
Alternativas
Muchos lenguajes de programación permiten definir tipos que pueden contemplar un valor nulo como parte de los valores del tipo, diferente a todos los demás.
- En Haskell
data Maybe a = Just a | Nothing
- En Ocaml y en Standard ML
type 'a option = Some of 'a | None
Otros lenguajes como Java, SQL, etc. tienen una noción de valor nulo que puede utilizarse directamente. Por ejemplo (en Java)
Integer valor = null;
Lenguajes como Perl y Python tienen valores nulos aunque estos se comportan como el valor false
en algunos contextos. Para diferenciar un valor de nulo en estos lenguajes se puede preguntar explícitamente. Por ejemplo (en Python)
if valor is None:
Referencias
- ↑ «Zero Means Null». Portland Pattern Repository's Wiki (en inglés). Consultado el 9 de junio de 2016.