[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 前橋