Los tipos que aceptan valores NULL son una característica de algunos lenguajes de programación que permiten que el valor se establezca en el valor especial NULL en lugar de los valores posibles habituales del tipo de datos . En lenguajes tipados estáticamente, un tipo que acepta valores NULL es un tipo de opción [ cita requerida ] , mientras que en lenguajes tipados dinámicamente (donde los valores tienen tipos, pero las variables no), se proporciona un comportamiento equivalente al tener un único valor nulo.
NULL se usa con frecuencia para representar un valor faltante o un valor no válido, como el de una función que no pudo regresar o un campo faltante en una base de datos, como en NULL en SQL .
Los tipos primitivos como enteros y booleanos generalmente no pueden ser nulos, pero los tipos que aceptan valores NULL correspondientes (enteros que aceptan valores NULL y booleanos que aceptan valores NULL, respectivamente) también pueden asumir el valor NULL. [ jerga ] [ cita requerida ]
Ejemplo
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 la 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 NULL. En lenguajes de programación como C # 2.0, un entero que acepta valores NULL, por ejemplo, puede declararse con un signo de interrogación (int? X). [1] En lenguajes de programación como C # 1.0, los tipos que aceptan valores NULL se pueden definir mediante una biblioteca externa [2] como nuevos tipos (por ejemplo, NullableInteger, NullableBoolean). [3]
Una variable booleana hace que el efecto sea más claro. Sus valores pueden ser "verdadero" o "falso", mientras que un booleano que acepta valores NULL 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 tal variable depende del idioma.
Comparado con punteros nulos
Por el contrario, los punteros a objetos se pueden establecer 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 aceptan valores NULL fueron inventadas por CAR Hoare en 1965 como parte del lenguaje Algol W. Hoare describió más tarde su invento como un "error de mil millones de dólares". [4] Esto se debe a que los punteros de objeto 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 de objeto es NULL.
Java tiene clases que corresponden a valores escalares, como Integer, Boolean y Float. Combinado con autoboxing ( conversión automática impulsada por el uso entre objeto y valor), esto permite efectivamente variables que aceptan valores NULL para valores escalares. [ cita requerida ]
Comparado con los tipos de opciones
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 amplía el concepto de tipo que acepta valores NULL, proviene de los tipos de opciones , que imponen el manejo explícito del caso excepcional. Las implementaciones de tipo de opción generalmente se adhieren al patrón de casos especiales. [5]
Ayuda de idioma
Los siguientes lenguajes de programación admiten tipos que aceptan valores NULL.
Los lenguajes de escritura estática con soporte nativo nulo incluyen:
Los lenguajes de tipado estático con soporte de biblioteca nula incluyen:
- C # (desde la versión 2)
- VB.NET
- Java (desde la versión 8)
- Scala
- oxígeno
- F#
- Idiomas CLI escritos estáticamente
Los lenguajes de tipado dinámico con nulo incluyen:
- Las variables escalares de Perl están predeterminadas
undef
y se pueden establecer enundef
. - PHP con tipo NULL y método is_null (), tipo nativo que acepta valores NULL en la versión 7.1 [10]
- Python tiene el
None
valor. [11] - Julia tiene el
nothing
valor (que es de tipoNothing
) y elUnion{T, Nothing}
modismo de tipo. [12] - Ruby con valor nulo y tipo NilClass.
- JavaScript tiene un
null
valor
Ver también
- Operador coalescente nulo
- Problema semipredicado
- Tipo de unión
- Tipo de unidad
Referencias
- ^ "Tipos que aceptan valores NULL (C #)" . Msdn.microsoft.com . Consultado el 19 de agosto de 2013 .
- ^ "(luKa) Developer Zone - NullableTypes" . Nullabletypes.sourceforge.net . Consultado el 19 de agosto de 2013 .
- ^ "NullableTypes" . Nullabletypes.sourceforge.net . Consultado el 19 de agosto de 2013 .
- ^ Tony Hoare (2009). "Referencias nulas: el error de mil millones de dólares" . QCon Londres.
- ^ "P de EAA: Caso especial" . Martinfowler.com . Consultado el 19 de agosto de 2013 .
- ^ "Tipo opcional - Lenguaje de programación de bailarina" .
- ^ "Sonido nulo seguridad | Dardo" .
- ^ "Seguridad nula - Lenguaje de programación Kotlin" .
- ^ "Tipos opcionales: el lenguaje de programación Swift" .
- ^ "PHP: RFC: nullable_types" .
- ^ "Constantes integradas - documentación de Python 3.9.5" .
- ^ "Tipos · el lenguaje de Julia" .