NULL

Un article de Wikipédia, l'encyclopédie libre.

Pour le musicien japonais, voir Kazuyuki K. Null.

NULL est une valeur particulière présente dans de nombreux langages informatiques. Elle signifie qu'un pointeur n'a pas de cible ou qu'une variable n'a pas de valeur. La notion de valeur ou de pointeur NULL est en particulier présente dans les langages C et C++ (ainsi que dans plusieurs langages dont la syntaxe est proche comme le JavaScript ou le PHP).

Selon les langages, NULL s'écrit : NULL, Null, null ou encore nil. En Python, l'équivalent de NULL est « None ».

Sommaire

[modifier] C et C++

NULL est défini dans le fichier d'en-tête stddef.h de la bibliothèque standard du C et a pour valeur binaire 0 (Mot).

Voici un exemple de code montrant l'initialisation d'un pointeur à NULL, avant d'être utilisé pour stocker l'adresse d'une variable :

int a = 2;       //Déclaration de la variable a de type int (entier) et initialisé avec 2
int * p = NULL;  //Déclaration d'un pointeur sur un int qui vaut NULL
p = &a ;         // l'adresse de a est affecté au pointeur p
*p = 5;          // Déréférenciation de p, pour affecter 5 à la variable a

Dans ces langages, NULL désigne également la fin d'une chaîne de caractères.

[modifier] NULL, Typage et Méta-modélisation

Soit deux types A et B distincts (et sans rapport)

A a = null;
B b = null;

La modélisation correcte d'un système de types rendant ces deux affections valables implique que null posède un type sous-type union de A et B : None. None est un type singleton ayant comme seule valeur possible null défini comme l'union de tous les types du programme. Comme ce type n'est pas modélisable sans une forme spéciale du langage et que son utilité est limitée (il n'accepte qu'une seule valeur, null ), peu de langages à typage statique le proposent.

Si on s'intéresse aux langage à objets, et qu'on pose comme première approximation du système de type :

type = classe

Alors la classe de null (étrangement tous ces langages utilisent plutôt la forme nil) devient la classe singleton None, sous-classe de toutes les classes ayant pour seule instance null. Pour garantir un fonctionnement cohérent avec le comportement des envois de messages sur null, toutes ces méthodes doivent êtres redéfinie par l'envoie d'une exception NullPointerException.

Bien qu'en théorie la valeur null puisse être quelconque, en pratique tous les langages utilisent la valeur 0. Cette valeur est non adressable et toute tentative d'accès provoque une erreur de segmentation. Si l'on veut proprement lever une exception, on doit protéger tous les envois de messages par un test à null. Bien entendu un bon compilateur ne génèrera pas ces tests dans les cas ou le receveur est trivialement non null (cas des self, this, super et autres) et dans certains autres cas.

[modifier] UNIX

Icône de détail Article détaillé : /dev/null.

Dans les systèmes UNIX, /dev/null est un fichier spécial qui détruit immédiatement toutes les données qui lui sont envoyées. Pour cette raison, ce fichier est appellé le « trou noir » ou encore la « poubelle ».

[modifier] Microsoft Windows

Dans les systèmes d'exploitations de Microsoft à partir de Windows 2000, NUL est un fichier spécial qui détruit immédiatement toutes les données qui lui sont envoyées.

[modifier] Voir aussi

wikt:

Voir « null » sur le Wiktionnaire.