Creo que la razón del uso de nil y nulo es que el primero es principalmente un sustantivo y el segundo principalmente un adjetivo (lo comprobé en la web y en mi diccionario: American Heritage 1992).
Con respecto al significado y la historia, NIL es una contracción del latín "nihil" que significa "nada".
Que yo sepa, el uso del nombre nil
para denotar un puntero nulo se introdujo con el lenguaje de programación Lisp (1958).
Un puntero nulo es un valor de puntero que se supone que no apunta a nada y, por lo tanto, no debe desreferenciarse. En la mayoría de los casos, los punteros son simplemente direcciones de memoria. Cualquier variable (es decir, cualquier ubicación) que esté destinada a contener dicho puntero siempre contendrá alguna configuración de bits, y dicha configuración puede leerse como una dirección de memoria. Por lo tanto, a menudo es el caso que el valor nil
será la dirección de un área de memoria que está prohibida para el programa, causando alguna forma de falla (posiblemente interrupción) si el programa intenta desreferenciar nil
, lo que solo puede ser un error.
Tener un valor estándar predefinido único para desempeñar este papel es esencial en los idiomas que usan punteros explícitamente, ya que es importante poder probar si un puntero apunta realmente a alguna ubicación de memoria, o no. Típicamente, en Lisp, se construyó una lista como una sucesión de pares "contras" que contienen un puntero "auto" a un elemento de la lista y un puntero "cdr" al siguiente par. En el último par de la lista, el segundo puntero era nil
.
Esto corresponde a la definición recursiva de una lista como una lista vacía o como un elemento de lista concatenado a una lista. Por lo tanto, una lista sin elemento fue representada por nil
. Esta lista vacía es la identidad del monoide de la lista.
Como las listas se pueden usar para representar conjuntos, el conjunto vacío también se puede representar en ese caso mediante nil
.
Por nil
lo tanto , históricamente fue un valor de puntero especial, pero llegó a entenderse como un valor de identidad especial para otros dominios más abstractos, como listas o conjuntos.
Un puntero igual a nil
era un puntero nulo, siendo nulo un adjetivo en lugar de un sustantivo (es decir, un sustantivo).
El uso coordinado de ambas palabras, como adjetivo y sustantivo, es bastante consistente con otras prácticas. El calificador nulo se usa a menudo para el cero de una estructura algebraica, como la identidad de un monoide: el elemento nulo . Las listas forman un monoide , donde el valor nulo es la identidad. Lo mismo ocurre con los conjuntos (aunque forman un álgebra con muchas más propiedades). Uno dice de manera similar que un número entero es nulo cuando es cero.
Existen muchas variaciones en el uso de estas palabras y otras, como ninguna, según los autores y las idiosincrasias de los lenguajes de programación.
Las dos connotaciones principales son , como se explicó anteriormente
como un "valor indefinido" estándar, que en realidad representa la ausencia de cualquier valor utilizable.
como valor de identidad de algún dominio
Esto muestra que no es del todo exacto afirmar que NIL es " un valor que representa la" ausencia de un valor ", como lo hizo Gilles en la respuesta aceptada . Depende del idioma y sus usos. El lenguaje de programación LISP probablemente introdujo NIL en la terminología de programación hace 55 años. En LISP, NIL
es la lista vacía, y se puede observar de manera equivalente.()
cuál es la representación natural de la lista vacía. No representa la ausencia de un valor. A veces se usa como marcador de posición para valores perdidos, aunque eso a menudo se debe evitar precisamente porque la lista vacía es un valor. Lo que representa un valor faltante en una estructura en cualquier objeto arbitrario, elegido por el programador, que no puede confundirse con valores aceptables.
Los dos conceptos son bastante diferentes, a pesar de que hemos demostrado anteriormente que pueden estar relacionados. Puede ser interesante tener una taxonomía de modo detallado del uso de la terminología enumerada por la respuesta de Gilles, para ver si los usos de cada una de estas palabras están orientados más hacia una connotación u otra.
Los nombres no son más de lo que están asignados a significar en un contexto dado, por quien esté definiendo el discurso. Algunos usos son más comunes, más naturales o más consistentes, pero uno siempre debe verificar las definiciones y asegurarse de qué significado se pretendía en cada contexto. Y no siempre se debe esperar que la terminología se haya elegido con gusto o consistencia.
NULL
(para compatibilidad con C) ynil
; invocar métodosnil
es un no-op. JavaScript tiene tantonull
(un valor que no representa nada) comoundefined
(el valor ni siquiera está establecido).