Je crois que la raison de l'utilisation de zéro et de nul est que le premier est principalement un substantif et le second principalement un adjectif (j'ai vérifié sur le Web et dans mon dictionnaire papier: American Heritage 1992).
En ce qui concerne le sens et l'histoire, NIL est une contraction du latin "nihil" qui signifie "rien".
À ma connaissance, l'utilisation du nom nil
pour désigner un pointeur nul a été introduite avec le langage de programmation Lisp (1958).
Un pointeur nul est une valeur de pointeur qui est censée pointer vers rien et ne doit donc pas être déréférencé. Dans la plupart des cas, les pointeurs sont simplement des adresses mémoire. Toute variable (c'est-à-dire n'importe quel emplacement) destinée à contenir un tel pointeur contiendra toujours une configuration de bits, et toute configuration de ce type peut être lue comme une adresse mémoire. Par conséquent, il arrive souvent que la valeur nil
soit l'adresse d'une zone de mémoire interdite au programme, provoquant ainsi une certaine forme d'échec (éventuellement une interruption) si le programme tente de déréférencer nil
, ce qui ne peut être qu'une erreur.
Avoir une valeur standard unique prédéfinie pour jouer ce rôle est essentiel dans les langages utilisant explicitement des pointeurs, car il est important de pouvoir tester si un pointeur pointe ou non vers un emplacement mémoire. Typiquement, en Lisp, une liste était construite comme une succession de paires "contre" contenant un pointeur "voiture" vers un élément de la liste et un pointeur "cdr" vers la paire suivante. Dans la dernière paire de la liste, le deuxième pointeur était nil
.
Cela correspond à la définition récursive d'une liste en tant que liste vide ou élément de liste concaténé à une liste. Par conséquent, une liste sans élément était représentée par nil
. Cette liste vide se trouve être l'identité du monoïde de la liste.
Puisque les listes peuvent être utilisées pour représenter des ensembles, l'ensemble vide peut dans ce cas également être représenté par nil
.
Ainsi nil
était historiquement une valeur de pointeur spécial, mais il est venu à être compris comme une valeur d'identité spéciale pour d' autres domaines plus abstraits, comme les listes ou ensembles.
Un pointeur égal à nil
était un pointeur nul, null étant un adjectif plutôt qu'un substantif (c'est-à-dire un substantif).
L'utilisation coordonnée des deux mots, comme adjectif et nom est tout à fait cohérente avec d'autres pratiques. Le qualificatif null est souvent utilisé pour le zéro d'une structure algébrique, comme l'identité d'un monoïde: l' élément nul . Les listes forment un monoïde , où la valeur nulle est l'identité. Il en va de même pour les ensembles (bien qu'ils forment une algèbre avec de nombreuses autres propriétés). On dit de même qu'un entier est nul quand il est nul.
Il existe de nombreuses variantes sur l'utilisation de ces mots et d'autres, comme aucun, selon les auteurs et les particularités des langages de programmation.
Les deux connotations principales sont , comme expliqué ci-dessus
comme une "valeur indéfinie" standard, représentant en fait l'absence de toute valeur utilisable.
comme valeur d'identité d'un domaine
Cela montre qu'il n'est pas tout à fait exact d'affirmer que NIL est " une valeur qui représente" l'absence de valeur ", comme l'a fait Gilles dans la réponse acceptée . Cela dépend de la langue et de ses usages. Le langage de programmation LISP a probablement introduit NIL dans la terminologie de programmation il y a 55 ans. Dans LISP, NIL
est la liste vide, et peut être notée de manière équivalente ()
qui est la représentation naturelle de la liste vide.Il ne représente pas l'absence de valeur. Il est parfois utilisé comme espace réservé pour les valeurs manquantes, bien que cela soit souvent à éviter précisément parce que la liste vide est une valeur. Ce qui représente une valeur manquante dans une structure dans n'importe quel objet arbitraire, choisi par le programmeur, qui ne peut pas être confondu avec des valeurs acceptables.
Les deux concepts sont assez différents, même si nous avons montré ci-dessus qu'ils peuvent être liés. Il pourrait être intéressant d'avoir un mode taxonomie détaillé de l'utilisation de la terminologie énumérée par Gilles'answer, pour voir si les usages de chacun de ces mots sont davantage orientés vers une connotation ou l'autre.
Les noms ne sont rien de plus que ce qu'ils sont censés signifier dans un contexte donné, par celui qui définit le discours. Certaines utilisations sont plus courantes, plus naturelles ou plus cohérentes, mais il faut toujours vérifier les définitions et s'assurer de la signification voulue dans chaque contexte. Et il ne faut pas toujours s'attendre à ce que la terminologie ait été choisie avec goût ou consistance.
NULL
(pour la compatibilité C) etnil
; appeler des méthodesnil
est un no-op. JavaScript a à la foisnull
(une valeur ne représentant rien) etundefined
(la valeur n'est même pas définie).