[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] Re: Nothing, Null, Empty




前橋です。

えんどう さん:
> SQL の NULL はたしか値が無い状態 (NaN ?多分違う..) です。
> BOOL 型のときも、NULL, FALSE, TRUE の3つの状態をとったと思います。

SQLのNULLは値が無効である状態を意味します。

たとえば、CやJavaなんかだと、intの変数をとりあえずゼロで初期化したり
しますけど、ゼロであることに意味があるならともかく、単に未設定なことを
意味したいのなら、それは本来やっちゃいけないことですよね。

年齢を示すintのフィールドageについて、まだ値がわからないからゼロなのか、
本当にゼロ歳なのか区別がつきません。年齢なら、マイナスになることはない
ので、-1にでもしときゃいいんですが、その型の全ての値を使う場合はそうい
うわけにもいかないでしょう。

CやJavaで、SQLのNULL相当品がないのは、

  んー、本当は、NULL欲しいんだけどなー、でも、そうすると、
  intが32bitなら、1ビットどっか別の所によけいにとるか、
  32bitのうちの1bitを「有効無効フラグ」に回さなきゃいかんしなー、
  「1ビットだけ」別の所にとると、バス幅と違うから遅くなるし、
  そのためだけに8bitとか32bitとか取るのもなあ。
  だからって、32bitのうち 1bitをフラグにすると、有効桁数減っ
  ちゃうし、ハードの演算命令を使えなくなっちゃうしなあ。

ということなんでしょう。

>> VBはそれがあるわけですね.
> そうみたいです。Nothing と Null です。

どうせVBは遅いしー、メモリだって馬鹿食いするしー、ってとこじゃ
ないでしょうか?
 
ええと、VBは全然知らないんですが、オブジェクト変数とやらは
ポインタ... じゃなくて参照なんでしょうか? :-p

だとすれば、オブジェクト変数について、

NothingとNullがあるのは、理解できないでもないです。
Nullは、何も指していない、という、意味のある値ですから。

>> う、さらにempty...ここまで来るとちょっと私には意図が理解出来ない
>> かも..(VB)

んで、Variantも、同様に「何か格納されている」状態と、
空っぽの状態を区別したかったのなら、emptyがあるのも納得できます。
もちょっと整理できなかったものかとは思いますけど。

ええと、他の型(Integerとか)には、NULL相当品はないんでしょうか?

                                              de 前橋