Valeur zéro
En informatique, un état censé indiquer l'absence de valeur est appelé valeur nulle ( NULL , NIL ou () en abrégé ) . Selon Edgar F. Codd, une distinction est faite entre deux types de : l'absence de valeur parce qu'elle n'existe pas (« propriété inapplicable »), ou l'absence parce que la valeur n'est pas (encore) connue (« valeur actuellement inconnue »). Une valeur zéro signifie l'absence de valeur, mais une valeur zéro est également une valeur.
NULL
La valeur zéro est différente du nombre 0car elle représente une valeur, c'est-à-dire une information. En termes linguistiques, la valeur zéro se distingue parfois du nombre algébrique 0 par la prononciation, dans laquelle (comme en anglais ) [ 'nl ] est prononcé pour éviter les malentendus.
Exemple 1
L'exemple suivant illustre la signification de NULLdans les bases de données et les programmes: Les médecins doivent saisir un diagnostic pour chaque patient dans un tableau de données après les avoir examinés. Qu'est-ce que cela signifie si aucun diagnostic n'est inscrit pour un patient dans ce tableau? Est-il en bonne santé ou tout simplement pas encore examiné?
Dans les listes papier, il est donc courant de rayer des champs vides pour indiquer clairement que le champ a été délibérément édité et qu'il devrait en fait être vide. Dans les bases de données, les champs qui n'ont pas encore été modifiés (ou qui n'ont aucune valeur pour d'autres raisons) ont la valeur NULL. Dès que vous saisissez spécifiquement une valeur, celle-ci disparaît NULLet la valeur saisie, qui peut également être vide (pas de diagnostic, c'est-à-dire saine), est enregistrée.
Exemple 2
Imaginez que les numéros de téléphone des étudiants devraient être stockés dans une base de données ou une longue liste. Vous définissez donc qu'une colonne du tableau ne peut contenir que des nombres. Si vous rencontrez un élève qui n'a pas de téléphone, vous mettriez probablement un tiret dans le champ de son numéro de téléphone au lieu du numéro de téléphone, ou peut-être le symbole «n / a» ou un point d'interrogation. Tous ces caractères sont destinés à signifier: Valeur non connue ou non disponible. C'est exactement ce que fait la valeur zéro avec le stockage électronique.
Représentation dans l'ordinateur
Si vous souhaitez définir une telle «ligne» dans une liste d'ordinateurs, cette «ligne» a besoin d'une forme numérique de représentation. Il existe deux approches ici:
Assimiler les valeurs valides convenues à l'indéfini
Une valeur formellement valide du champ est arbitrairement sélectionnée comme une valeur zéro. La valeur zéro est soit évidente dans le contexte, soit doit être explicitement documentée.
Si les citations des apôtres sont données dans un tableau, on pourrait écrire des valeurs numériques de 1 à 12 dans la dernière colonne, qui indiquent lequel des apôtres de Jésus est cité ici. Si elle est inconnue, on pourrait maintenant noter la valeur 13 ou -1, ce qui signifie qu'on ne sait pas de qui il s'agissait, ou si c'était un disciple de Jésus du tout, ou qu'aucun disciple de Jésus n'est définitivement cité.
L'avantage de cette méthode est qu'elle économise essentiellement de l'espace de stockage. L'inconvénient est qu'une valeur définie à l'origine comme une valeur nulle peut entrer en conflit avec une valeur réelle. Si vous pensez à une valeur zéro de 13 dans la liste ci-dessus, il peut arriver qu'un jour l'apôtre Paul soit cité et attribué le numéro 13, ce qui maintenant peut-être entre en conflit avec une citation de Goethe sans être remarqué.
Ce problème s'est produit à plusieurs reprises dans le passé, y compris en tant que problème de l'an 2000 .
Valeur zéro comme valeur fondamentalement différente
Afin d'éviter le problème ci-dessus, la valeur nulle peut être séparée sans équivoque des valeurs valides en introduisant un caractère spécial qui n'est toujours qu'une valeur nulle dans tous les contextes.
Une implémentation technique est recommandée dans les langages de programmation qui connaissent des variables de type pointeur, c'est-à-dire en référence à la valeur réelle. Vous pouvez maintenant déterminer une certaine place dans la mémoire de travail, qui est comprise comme une valeur zéro - et uniquement comme une valeur zéro. Parmi les nombreuses possibilités de rendez-vous, le rendez-vous à zéro est particulièrement adapté , car le déréférencement d' un pointeur pointant vers l'adresse 0 conduit à un crash sur la plupart des combinaisons système d'exploitation-machine. Si la colonne du tableau ci-dessus ne contient normalement que des pointeurs vers des numéros de téléphone, il est logique de donner au pointeur nul le sens que le numéro de téléphone vide se trouve à ce stade .
Dans le langage de programmation C, le soi-disant pointeur nul existe (engl. A cet effet, pointeur nul ). Dans le texte du programme, une constante de pointeur nul peut être exprimée par n'importe quelle expression de constante entière (une expression de nombre entier constant qui doit remplir certaines conditions) avec la valeur 0, éventuellement avec une conversion après void*( ISO / CEI 9899 : 1999 6.3.2.3 Paragraphe 3). La bibliothèque standard C fournit une macro NULLqui se développe en une telle expression.
En C ++ , une constante de pointeur nul ne peut pas void*contenir de conversion en (ISO / CEI 14882: 1998 4.10, paragraphe 1), cela s'applique également en C ++ à la macro standard NULL, qui ne se 0développe donc généralement qu'en une valeur entière en C ++ . Étant donné que cela conduit à d' autres problèmes - est donc ce type constant intet non un type de pointeur - était en C ++ 11 introduit un nouveau mot - clé pour constante de pointeur NULL: nullptr. Cette constante est de son propre type de données ( std::nullptr_t), qui peut être converti en n'importe quel type de pointeur (données, pointeur de fonction), mais pas en une expression entière.
En C # , nullla valeur par défaut des types de référence tels que Object, String ou List est. Lors de l'utilisation de ces types, il est donc important de les initialiser avant utilisation, ou de vérifier avant utilisation si la variable a actuellement la valeur null. Les types simples tels que int, par contre, ne peuvent pas nullêtre affectés et doivent donc se voir attribuer une valeur réelle telle que 0. Depuis C # 2.0, cependant, il existe également la possibilité d'utiliser des types dits Nullables , qui permettent d' nullattribuer des types simples tels que int ou bool .
D'autres langages de programmation, tels que Java , fournissent un mot-clé dédié pour la valeur nulle. Dans certains langages typés dynamiquement tels que Smalltalk, il existe un objet Null prédéfini spécial qui prend la fonction d'une valeur nulle canonique .
NULL dans les bases de données SQL
Classification et traitement selon la logique de la base de données
Les systèmes de bases de données relationnelles utilisent une logique à trois valeurs qui est implémentée dans le langage de requête et de mise à jour SQL : Ici, Inconnu est la troisième valeur de vérité aux côtés de False et True . Les liens logiques habituels Et et Ou sont adaptés en définissant False = 0, True = 1 et Unknown = ½. Puis entre deux valeurs de vérité a, b: et .
En SQL, NULL n'est pas une valeur car la propriété fondamentale des valeurs, à savoir pouvoir les comparer avec d'autres valeurs du même type de données , ne produit pas le résultat souhaité. Par exemple, le prédicat aboutit Spalte = NULLtoujours à inconnu , même s'il existe une valeur dans la colonne NULL. Au lieu de cela, les prédicats IS NULLet doivent être IS NOT NULLutilisés NULLpour tester une valeur pour .
D'une part, on parle de la soi-disant indétermination ne sait pas, c'est-à- dire de l'ignorance déjà décrite de la valeur, d'autre part, il y a la soi-disant indétermination sans souci , qui se produit dans les bases de données lorsqu'un ensemble de données n'a tout simplement pas une certaine valeur nécessaire. Un exemple qui est facile à voir est le cas d'une base de données de documents dans laquelle une table avec divers documents multimédias est gérée - par exemple des livres et des CD . En plus des informations générales telles que le nom , le sujet , l' emplacement de l'étagère , le tableau peut également avoir des colonnes spécifiques au support telles que ISBN ou l' artiste . Dans ce cas, toutes les entrées sur les CD auraient une valeur dans la colonne ISBN NULL , puisque généralement seuls les livres ont un ISBN. En conséquence, la plupart des livres ( à l' exception des livres audio) dans la colonne aurait interprète une NULLposition, que les livres ont tendance à être créés par des auteurs des artistes.
La doctrine courante est que l'apparition d' incertitudes sans importance indique des erreurs dans la conception de la base de données. En bref, la base de données doit être planifiée et implémentée dès le départ de telle sorte que les NULL sans importance ne se produisent jamais.
Dans The Third Manifesto, Christopher J. Date et Hugh Darwen soulignent le problème des systèmes de bases de données relationnelles et critiquent le fait que la valeur qu'ils contiennent n'est pas sans ambiguïté, car elle peut indiquer une inconnue ou une non-existence. Dans le troisième Manifeste, vous expliquez comment vous pouvez structurer une base de données relationnelle sans utiliser de , en normalisant les valeurs qui peuvent contenir dans vos propres tables de relations.NULLNULLNULLNULL
Détresse zéro
La construction de langage non nulle, empruntée au langage de base de données SQL, décrit l'exigence selon laquelle elle NULLest interdite dans un contexte particulier. En SQL, il existe NOT NULLune contrainte très courante , c'est-à-dire une condition d'intégrité que le logiciel applique généralement.
Dans la description des interfaces utilisateur, il est indiqué par la note not nullqu'un champ de données dans la sortie doit toujours être rempli et / ou généralement ne pas être laissé vide lors de la saisie des données. En règle générale, la signification de non vide est interprétée un peu plus généreusement dans ce dernier cas, de sorte qu'une valeur autorisée doit être saisie dans chaque cas, ce qui, par exemple, peut exclure des séquences d'espaces.
Différentes représentations de la valeur zéro
NIL
Certains langages de programmation (par exemple, Pascal , Lisp , Smalltalk , Ruby , Objective-C , Lua , Scala ) utilisent la désignation nilau lieu de Nullou null. Nil signifie anglais not in list, donc pas dans la liste . Il y a des raisons historiques à cela, cela vient du langage de programmation Lisp, qui connaît l' arbre binaire lié dans le sens feuille comme la seule structure de données , mais qui n'est généralement utilisé que pour représenter de simples listes liées . Le nom a également été adopté pour d'autres langages de programmation, car le mot latin nil ne signifie rien .
NIL est également un appareil du système informatique Amiga de Commodore . Par exemple >NIL:, si vous redirigez un fichier , la sortie est pratiquement déplacée vers rien . Cela correspond à / dev / null sous Unix.
Aucun
De plus, la désignation Aucun est parfois utilisée pour une valeur nulle, telle que B. dans le langage de programmation Python .
Rien
Dans le langage de programmation Visual Basic , Nothing représente une variable non initialisée ou une variable définie sur Nothing pour l'instance d'une classe. Recherchez zéro ou Nothing avec: If IsNull (var_Myvar) Then ... If obj_MyClass Is Nothing Then ...
null / NULL / nullptr
En Java, les objets ne sont adressés que via des références. Une référence d'objet qui ne fait pas référence à un objetnull reçoit la valeur . Cela correspond à peu près à l'utilisation du pointeur nul en C et C ++, qui est représenté par la macro NULLou - depuis C ++ 11 - par le mot-clé nullptr.
NaN
Selon la norme IEEE 754 , la désignation NaN ( pas un nombre ) est utilisée pour les nombres à virgule flottante avec des valeurs non définies ou non représentables . Les NaN sont des modèles de bits réservés qui sont différents de toutes les valeurs autorisées. Par exemple, NaN est le résultat de la division de «0 par 0».
Valeur sentinelle ou gardien
Une sentinelle (comme un NULLpointeur ) ne peut pas apparaître comme une «valeur réelle». Il est envoyé l'argument de recherche dans les boucles de recherche afin que la logique du programme s'exécute toujours sur un résultat "trouvé". Une requête pour la fin de la liste est donc faite en même temps. Après la boucle, on examine comment elle s'est terminée; et si cela a été fait via Sentinel, le résultat global est changé en "non trouvé".
Démarcation
Une valeur zéro ne peut pas être identifiée avec le nombre zéro car une valeur zéro ne doit pas être comprise comme un nombre. Une valeur nulle doit également être distinguée de l' ensemble vide , car elle ne doit pas être comprise comme un ensemble .
NUL
NUL est une abréviation courante pour le caractère nul .
De nombreux systèmes d'exploitation (par exemple MS-DOS et Windows ) utilisent également le nom NUL pour définir un périphérique de sortie virtuel qui rejette simplement les données enregistrées. En redirigeant vers NUL, par exemple, la sortie indésirable d'une commande peut être supprimée. C'est équivalent à / dev / null sous UNIX.
Voir également
- Rien
- zéro
- Signe nul
- Type de données
- aiguille
- / dev / null (fichier de périphérique Unix)
Preuve individuelle
- ^ EF Codd: Extension du modèle relationnel de base de données pour capturer plus de sens 1979, section 2.3. P. 7
- ↑ Kernighan / Ritchie: Programming in C (deuxième édition) 1990, p. 99
-
↑ MSDN
null(C # Reference ), consulté le 6 mai 2011 - ↑ MSDN Nullable Types (C # Programming Guide ), consulté le 6 mai 2011
- ^ The Third Manifesto - Date & Darwen , consulté le 6 mai 2011