Los tipos que aceptan valores nulos son una característica de algunos lenguajes de programación que permiten que un valor se establezca en el valor especial NULL en lugar de los valores posibles habituales del tipo de datos . En lenguajes con tipado estático, un tipo que acepta valores nulos es un tipo de opción , [ cita requerida ] mientras que en lenguajes con tipado dinámico (donde los valores tienen tipos, pero las variables no), se proporciona un comportamiento equivalente al tener un único valor nulo.
NULL se utiliza con frecuencia para representar un valor faltante o un valor no válido, como el de una función que no pudo devolver un valor o un campo faltante en una base de datos, como NULL en SQL . En otras palabras, NULL no está definido.
Los tipos primitivos como los números enteros y los booleanos generalmente no pueden ser nulos, pero los tipos nulos correspondientes (entero nulo y booleano nulo, respectivamente) también pueden asumir el valor NULO. [ jerga ] [ cita necesaria ] Esto se puede representar en lógica ternaria como FALSO, NULO, VERDADERO como en la lógica de tres valores .
Una variable entera puede representar números enteros, pero 0 (cero) es un caso especial porque 0 en muchos lenguajes de programación puede significar "falso". Además, esto no nos da ninguna noción de decir que la variable está vacía, una necesidad que ocurre en muchas circunstancias. Esta necesidad se puede lograr con un tipo que acepta valores nulos. En lenguajes de programación como C# 2.0, un entero que acepta valores nulos, por ejemplo, se puede declarar con un signo de interrogación (int? x). [1] [2] : 46 En lenguajes de programación como C# 1.0, los tipos que aceptan valores nulos se pueden definir mediante una biblioteca externa [3] como nuevos tipos (por ejemplo, NullableInteger, NullableBoolean). [4]
Una variable booleana hace que el efecto sea más claro. Sus valores pueden ser "verdaderos" o "falsos", mientras que un valor booleano que admita valores nulos también puede contener una representación de "indeciso". Sin embargo, la interpretación o el tratamiento de una operación lógica que involucre a una variable de este tipo depende del lenguaje.
Por el contrario, los punteros a objetos pueden establecerse en NULL de forma predeterminada en la mayoría de los lenguajes comunes, lo que significa que el puntero o la referencia no apunta a ninguna parte, que no se asigna ningún objeto (la variable no apunta a ningún objeto). Las referencias que admiten valores NULL fueron inventadas por CAR Hoare en 1965 como parte del lenguaje Algol W. Hoare luego describió su invención como un "error de mil millones de dólares". [5] Esto se debe a que los punteros a objetos que pueden ser NULL requieren que el usuario verifique el puntero antes de usarlo y requieren un código específico para manejar el caso cuando el puntero a objeto es NULL.
Java tiene clases que corresponden a valores escalares, como Integer, Boolean y Float. Combinado con el autoboxing (conversión automática basada en el uso entre objeto y valor), esto permite efectivamente variables que aceptan valores nulos para valores escalares. [ cita requerida ]
Las implementaciones de tipos que aceptan valores NULL generalmente se adhieren al patrón de objeto nulo .
Existe un concepto más general y formal que extiende el concepto de tipo que acepta valores null, proviene de los tipos de opción , que imponen un manejo explícito del caso excepcional.
Los siguientes lenguajes de programación admiten tipos que aceptan valores NULL.
Los lenguajes tipados estáticamente con soporte nulo nativo incluyen:
Los lenguajes tipados estáticamente con soporte para la biblioteca null incluyen:
Los lenguajes tipados dinámicamente con valores nulos incluyen:
undef
tienen como valor predeterminado y se pueden configurar como undef
.None
valor. [12]nothing
valor (que es de tipo Nothing
) y el Union{T, Nothing}
tipo idiom. [13]null
y undefined
.