31 votes

Pourquoi n'avons-nous pas deux nuls?

Je me suis souvent demandé pourquoi les langues avec un null représentant "pas de valeur" ne font pas la différence entre le passif "je ne sais pas quelle en est la valeur" et les plus affirmé, "Il n'y a pas de valeur.".

Il y a eu plusieurs cas où j'aurais aimé la différence entre les deux (surtout quand on travaille avec de l'entrée utilisateur et bases de données).

J'imagine que le suivant, où nous avons le nom des deux états d' unknown et null:

var apple;

while (apple is unknown)
{
    askForApple();
}

if (apple is null)
{
    sulk();
}
else
{
    eatApple(apple);
}

Évidemment, nous pouvons sortir sans elle par la main stockant l'état somwhere d'autre, mais nous pouvons le faire que pour les valeurs null trop.

Donc, si nous pouvons avoir un null, pourquoi ne pouvons-nous pas avoir les deux?

39voto

Avi Points 14468

N'est-ce pas, c'est assez mauvais que nous avons un null?

34voto

kgiannakakis Points 62727

Dans la plupart des langages de programmation null signifie "vide" ou "indéfini". "Inconnu" sur l'autre main est quelque chose de différent. En substance, "inconnu", décrit l'état de l'objet. Cet état doit venir de quelque part dans votre programme.

Jetez un oeil à l' Objet Null modèle. Il peut vous aider avec ce que vous essayez d'atteindre.

34voto

ddaa Points 19102

Dans ma programmation, j'ai récemment adopté la pratique de la différenciation "langue null" et "domaine null".

La "langue null" est la valeur spéciale qui est fourni par le langage de programmation pour exprimer qu'une variable a "aucune valeur". Il est nécessaire en tant que valeur factice dans des structures de données, des listes de paramètres et valeurs de retour.

Le "domaine null" est n'importe quel nombre d'objets qui implémentent l' NullObject modèle de conception. En fait, vous avez un domaine distincts null pour chaque contexte d'un domaine.

Il est assez commun pour les programmeurs à utiliser la langue null comme un fourre-tout domaine null, mais j'ai trouvé qu'il tend à rendre le code plus procédurale (moins orienté objet) et de l'intention plus difficile à discerner.

Chaque fois que de vouloir null, demandez-vous: est-ce qu'une langue null, ou un domaine null?

11voto

tehvan Points 3949

javascript a en fait deux null et undefined (http://www.w3schools.com/jsref/jsref_undefined.asp), mais dans beaucoup d'autres langues n'en ont pas.

11voto

marijne Points 1398

Il serait assez facile de créer une constante statique indiquant inconnu, pour les rares cas où vous auriez besoin d'une telle chose.

var apple = Apple.Unknown;
while (apple == Apple.Unknown) {} // etc

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X