In wie vielen Sprachen ist Null nicht gleich Null?

7

In wie vielen Sprachen ist Null nicht gleich Null, nicht Null?

    
cazlab 16.09.2008, 18:10
quelle

7 Antworten

15

Dies ist in SQL (als logische Sprache) so, weil null unbekannt / undefiniert bedeutet.

In Programmiersprachen (wie zB C ++ oder C #) ist ein Nullzeiger / Verweis jedoch ein bestimmter Wert mit einer bestimmten Bedeutung - nichts.

Zwei Nichtigkeiten sind äquivalent, aber zwei Unbekannte nicht. Die Verwirrung kommt von der Tatsache, dass der gleiche Name (Null) für beide Konzepte verwendet wird.

    
Jonathan Rupp 16.09.2008, 18:15
quelle
4

In VB6 erzeugt der Ausdruck Null = Null Null anstatt True , wie Sie es erwarten würden. Dies führt zu einem Laufzeitfehler, wenn Sie versuchen, es einem Boolean zuzuordnen, wenn Sie es jedoch verwenden als Bedingung von " If ... Then " verhält es sich wie False . Außerdem wird Null <> Null auch produzieren Null , also:

In VB6 könnte man sagen, dass Null weder gleich selbst (oder irgendetwas anderes) ist, noch ungleich!

Sie sollten es mit der Funktion IsNull() testen.

VB6 hat auch andere spezielle Werte:

  • Nothing für Objektreferenzen. Nothing = Nothing ist ein Kompilierungsfehler. (Sie sollten es mit " is " vergleichen)
  • Missing für optionale Parameter, die nicht angegeben wurden. Es hat keine wörtliche Darstellung, so dass Sie nicht einmal Missing = Missing schreiben können. (Der Test ist IsMissing(foo) )
  • Empty für nicht initialisierte Variablen. Dieser testet gleich mit sich selbst, obwohl es auch eine Funktion IsEmpty() .
  • gibt
  • ... lass es mich wissen, wenn ich eins vergessen habe

Ich erinnere mich, dass ich ein bißchen angewidert von VB war.

    
Hugh Allen 26.09.2008 05:54
quelle
3

Oracle ist so.

%Vor%     
Josh Bush 16.09.2008 18:12
quelle
3

MySQL hat einen null-sicheren Gleichheitsoperator, & lt; = & gt ;, der wahr zurückgibt, wenn beide Seiten gleich sind oder beide Seiten null sind. Siehe MySQL-Dokumente .

    
Justin 16.09.2008 18:20
quelle
2

In C #, Nullable & lt; bool & gt; hat interessante Eigenschaften in Bezug auf logische Operatoren, aber der Gleichheitsoperator ist der gleiche wie andere Typen in dieser Sprache (d. h. ((bool?) null == (bool?) null) == true).

Um das kurzgeschlossene Verhalten der kurzgeschlossenen logischen Operatoren zu bewahren und die Konsistenz mit den Nicht-kurzgeschlossene logische Operatoren, der Nullable Boolean hat einige interessante Eigenschaften. Zum Beispiel: true || null == Wahr. falsch & amp; & amp; null == false usw. Dies steht in direktem Widerspruch zu anderen dreiwertigen Logiksprachen wie ANSI SQL .

    
Jeffrey L Whitledge 26.09.2008 06:36
quelle
2

Sie können Rubin auf diese Weise arbeiten lassen:

%Vor%     
AShelly 16.09.2008 18:29
quelle
0

In SQL müssten Sie etwas tun wie:

%Vor%

statt

%Vor%     
Stephane Grenier 26.11.2009 19:02
quelle