Il existe normalement deux valeurs spéciales. Certaines langues gèrent les deux, certaines seulement 1 et jettent une erreur avec l'autre, et d'autres fusionnent les deux. Ces deux valeurs sont Null
et Undefined
.
Null
peut être utile car il est une valeur garantie qui indique que quelque chose ne va pas, ou en dehors du domaine/gamme de réponses possibles. Prenez Java par exemple:
Si vous n'aviez pas null
, que se passe-t-il si vous avez fait une recherche dans un HashMap
pour quelque chose qui n'existait pas dans la carte? Que voulez-vous retourner? Si vous retourniez un objet, comment sauriez-vous si cet objet signifiait qu'il n'y avait rien ou que c'était ce qui était réellement dans la carte? Les solutions de contournement pourraient inclure la création de votre propre objet constant "NON_EXIST", mais c'est essentiellement la même chose que ce que null
est déjà de toute façon. Une autre solution de contournement peut être une exception. Vous examinez maintenant les principaux impacts sur le rendement.
Encore une fois, c'est l'idée d'avoir une valeur admissible garantie que vous pouvez utiliser. Il est toujours disponible pour vous et il est toujours disjoint de l'ensemble des «valeurs réelles» qui reviendraient normalement d'une opération que vous effectuez. Null
est donc intentionnellement utilisé pour signifier quelque chose de spécial.
Comme je l'ai déjà dit, il existe également des optimisations qui peuvent être effectuées ici car Null
est une valeur spéciale. Dans des langages tels que Java si vous avez initialement référencé un objet uniquement par une variable, définissez cette variable sur null
. Vous supprimez cette référence et autorisez le Garbage Collector de Java à collecter les données non référencées. Si à la place vous laissez cette variable s'asseoir pour toujours, ce morceau de mémoire qui ne sera peut-être jamais utilisé à nouveau contiendra des ressources. Ceci est un exemple artificiel, mais cela prouve un point et dans certains programmes Java gourmands en ressources, vous verrez ces affectations explicites à null
.
C'est une question philosophiquement frustrante. – Daniel