Null が Null でさえないものと等しくない言語はいくつありますか?
7 に答える
nullは不明/未定義を意味するため、SQLでは(論理言語として)このようになります。
ただし、プログラミング言語(C ++やC#など)では、nullポインター/参照は特定の意味を持つ特定の値であり、何もありません。
2つのものは同等ですが、2つの未知のものは同等ではありません。混乱は、両方の概念に同じ名前(null)が使用されているという事実から生じています。
VB6では、期待どおりではなく式Null = Null
が生成されます。これをブール値に割り当てようとするとランタイム エラーが発生しますが、" " の条件として使用すると、 のように動作します。さらに、 も生成
するので、次のようになります。Null
True
If ... Then
False
Null <> Null
Null
VB6 では、これNull
はそれ自体 (またはその他のもの) と同じでもなく、等しくないとも言えません!
関数を使用してテストすることになっていIsNull()
ます。
VB6 には他にも特別な値があります。
Nothing
オブジェクト参照用。Nothing = Nothing
コンパイルエラーです。(「 」を使用して比較することになっていますis
)Missing
与えられていないオプションのパラメータ。リテラル表現がないため、書くことさえできませんMissing = Missing
。(テストはIsMissing(foo)
)Empty
初期化されていない変数の場合。functionもありますが、これはそれ自体と等しいテストを行いますIsEmpty()
。- ...忘れていたら教えてください
VBに少しうんざりしたことを覚えています。
MySQL にはヌルセーフ等価演算子 <=> があり、両側が等しい場合、または両側がヌルの場合に true を返します。MySQL ドキュメントを参照してください。
オラクルはこの通り。
SELECT * FROM dual WHERE NULL=null; --no rows returned
Ruby をそのように動作させることができます:
class Null
def self.==(other);false;end
end
n=Null
print "Null equals nothing" if n!=Null
C# では、Nullable<bool> は論理演算子に関して興味深いプロパティを持っていますが、等価演算子はその言語の他の型と同じです (つまり、((bool?)null == (bool?)null) == true)。 .
短絡論理演算子の短絡動作を保持し、非短絡論理演算子との一貫性を保持するために、null 許容ブール値にはいくつかの興味深いプロパティがあります。例: true || ヌル == 真。false && null == false など。これは、ANSI SQLなどの他の 3 値論理言語とはまったく矛盾しています。
SQL では、次のようにする必要があります。
WHERE column is NULL
それよりも
WHERE column = NULL