Help us understand the problem. What is going on with this article?

TwitterでバズっていたNullの話

TwitterでバズっていたNUllの話

2019/11/15 なぜか、Nullがトレンドに入っていて驚いた。
プログラマでなければ、出会わないであろう言葉がTwitterを賑わせていて少しうれしい気持ちになった。

・・・が直後

タイムラインを読んでいると、 「なんだかもっともらしいが、怪しそうな言説」 をたくさん見かけてモヤモヤしてしまった

ので!記事にまとめてみました。

事の発端

TwitterでNullがバズった原因はとある漫画で次のセリフがあったかららしい

その人類最後の希望は「Null」と呼ばれた
現存言語でそれは・・・
0(ゼロ)

まあ、プログラマ的には、文句を言いたくなる内容ですね。
みんなの気持ちはわかります。

肝心のところ、Null ってなによ?

Twitter民のつぶやきで多かったのは以下のようなTweetです。
※確証としてつぶやきを載せても良かったのですが、晒しみたいで嫌なのでテキストだけ・・・

0っていうのは、値が入っていて
Nullてのは値が入っていないんだ

またはこんなコードを載せていた人もいましたね。

nullは0じゃない!? 1未満0より大きい!?

null < 1 #true
0 == null #false
0 < null #true

いずれも、正しいのに正しくない、違和感のある回答ばかりです。

1.Nullは値ではなく、状態である

Nullは、値ではなくて状態 というのが古来からの伝承です。
論ずるより証拠です。

どのような言語でもNullは明確に とは異なる扱いを受けています。

下記はC#ですが、JavaではEquals()を使いますね。

var hogehoge = null
if(String.isNullOrEmpty(hogehoge)){
    // つまり、Nullは値が入っていない(空)とは別の扱いを受けている
    console.WriteLine("hogehoge is Null!!Or Empty!!")
}

DBでも下記のように比較するでしょう
値ではないので比較演算子にも差を設けている言語が多いという印象です。

SELECT * FROM HOGEHOGE
WHERE COLUMN_1 IS NULL

2.Nullは値が入っていないのではない、値がわからない状態である

例えて言うと、以下の用な感じです。

  1. 手のひらにコインが1枚見えている(1)
  2. 手のひらにコインがない(0)
  3. 手を握っていて中身が見えない(Null)

つまり、 値が入っていないのではなく、値が入っているかどうかすらわからない状態ということです

更に例えるなら、以下のような感じです

この世の中にツチノコは何匹いるでしょうか?

果たしてあなたは、 この世のツチノコの数を答えることができるでしょうか?
0とも1とも言えないのではないでしょうか?すべて確かめてみるまでは分かりません。

プログラム上でこの揺らぎを表現するために産まれたものが Null なのです。

先程のTweetに対する私なりの答え

0っていうのは、値が入っていて
Nullてのは値が入っていないんだ

私の回答:
いいえ、違います。値が入っていないかどうかもわからない状態です。
値が入っていなければ、その型に応じた値を入れるべきです。
例えば、空文字や0、falseなどといった値です。

nullは0じゃない!? 1未満0より大きい!?

powershell

null < 1 #true
0 == null #false
0 < null #true

私の回答:
実行結果は正しいですが、コンテキストに騙されています。
ありがちなミスなので気をつけましょう。

nullと数字は比較した場合、そもそも性質が異なるものですのでfalseです。
つまり、 この数字はnullじゃない という比較をしたらtrueになります。
したがって、こんな比較をしても矛盾は生じません。

null < 1 #true
null > 1 #true

余談:別の角度から見たNull

ドイツ語でNullって0(ゼロ)って意味らしいですね。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away