Question

Dans combien de langues Null n'est-il pas égal à quelque chose qui n'est même pas Null?

Était-ce utile?

La solution

C'est ainsi en SQL (en tant que langage logique) car null signifie inconnu / indéfini.

Cependant, dans les langages de programmation (comme par exemple C ++ ou C #), un pointeur / une référence null est une valeur spécifique avec une signification spécifique - rien.

Deux riens sont équivalents, mais deux inconnus ne le sont pas. La confusion vient du fait que le même nom (null) est utilisé pour les deux concepts.

Autres conseils

Dans VB6, l'expression Null = Null produira Null au lieu de True comme vous le souhaitiez. Cela provoquera une erreur d’exécution si vous essayez de l’affecter à un booléen, mais si vous l’utilisez comme condition de " If ... Then " il agira comme False. En outre, Null <> Null sera également produire IsNull(), donc:

Dans VB6, vous pourriez dire que Nothing n'est ni égal à lui-même (ni à quoi que ce soit d'autre), ni inégalitaire!

Vous êtes censé le tester à l'aide de la Nothing = Nothing fonction.

VB6 a également d'autres valeurs spéciales:

  • is pour les références d'objet. Missing est une erreur de compilation. (vous êtes censé comparer avec " Missing = Missing ")
  • IsMissing(foo) pour les paramètres optionnels non renseignés. Il n’a pas de représentation littérale et vous ne pouvez même pas écrire Empty. (le test est IsEmpty())
  • <=> pour les variables non initialisées. Celui-ci effectue un test égal à lui-même bien qu'il y ait également une fonction <=>.
  • ... laissez-moi savoir si j'en ai oublié un

Je me souviens d'avoir été un peu dégoûté de VB.

Oracle est comme ça.

SELECT * FROM dual WHERE NULL=null;  --no rows returned

MySQL a un opérateur d'égalité null-safe, < = > ;, qui renvoie la valeur true si les deux côtés sont égaux ou nuls. Voir Documents MySQL .

En C #, Nullable < bool > possède des propriétés intéressantes par rapport aux opérateurs logiques, mais l'opérateur d'égalité est le même que les autres types de ce langage (c'est-à-dire ((bool?) null == (bool?) null) == true).

Pour préserver le court-circuité le comportement des opérateurs logiques court-circuités, et pour préserver la cohérence avec les opérateurs logiques non court-circuités, le booléen nullable a des propriétés intéressantes. Par exemple: true || null == true. false & amp; & amp; null == false, etc. Ceci est en contradiction directe avec d'autres langages logiques à trois valeurs tels que ANSI SQL .

Vous pouvez faire fonctionner le rubis de cette façon:

class Null
 def self.==(other);false;end
end
n=Null
print "Null equals nothing" if n!=Null

En SQL, vous devriez faire quelque chose comme:

WHERE column is NULL

plutôt que

WHERE column = NULL
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top