トップ «前の日記(2004-04-07) 最新 次の日記(2004-04-09)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2004-04-08

_ NULLとnull

完全にネタなので、だからどうしたっていうようなことではないので注意。また、非常に限定された知識だけで書いてるからこの内容に価値があるわけでもない。でも、おもしろいから書く。(追記:要するに、SimlulaとかSmalltalkでのありようを知らない人間が書く内容じゃないだろうって意味であって、別にデタラメを書いているわけではないと、注しておこう)

初めての人のためのLISP (ソフトウェアライブラリ (3))(竹内 郁雄)

次の2つの概念が重要じゃ。

atom。(後略)

もう1つがnull。nilと似ていると思ったとしたらエライ。事実、英語の意味は両者とも同じだ。nullを使うと、nilだけがハイと答えて来る。それ以外のものはイイエと答えるわけだ。

この世界ではnullは、マジックナンバーどころか、万物は陰と陽から成立しますというような世界の陰に相当するくらい重要な概念。(とは言え、ここでのnullは述語で名詞となるのはnil)

よく似た言葉にNULLがある。これは

(VC++6のstdlib.h)

#ifndef NULL

#ifdef __cplusplus

#define NULL 0

#else

#define NULL ((void *)0)

#endif

#endif

で、Cのほうでは何も指さないポインターという意味だが、C++では単に0というだけで、それがメモリーのアドレスなのか数値なのか文字列の終了マークなのか、なんだかさっぱりわからない。

で、NULLを想像してマジックナンバーというのならば、それは確かに魔法の数字以外の何者でもないので理解可能かも。

とは言え、JavaはJavaで、LISPでもなければC/C++ではない。その言語の世界観がある。

そこでちょっと考えてみる。

Javaのコーディング規約では定数は大文字とされている。したがって、nullは単なる定数(constants)のNULLではない。先頭が大文字のNullでもない。だからクラスではない。nullは全部小文字だ。このタイプのものは他にはtrueとfalseがあるだけだ。ちなみにこっちは直定数(literals)。

これはC/C++のNULLよりは、はるかにLISPのnil(nullではなく)に近い。違いは、LISPのnilはfalseの意味も持つこと。だが、これはJavaは型が厳密でbooleanとObjectの参照を分けざるを得ないからnilではなくnullとfalseに泣き別れさせたという印象を受ける。

たった、3個しかないシンボルで表記されたリテラル(数値リテラルや文字列リテラルはシンボルではない)について言えば、== false、== true, == null および != false, != true, != nullはすべて同等に一意である。まあ、バグを少なくする記述方法として条件節内で明示的にtrueやfalseを書くべきではないというのはあるから、常に== nullとやって検査する必要は無いけど。

_ メソッド名補完

VS.NETに比べると、(使った時点/使ったマシン上では)Eclipse、NetBeansとも僕には耐え難いほど反応が鈍かったので、JavaはEmacs/Meadowで記述している。だから意識してなかったが、考えてみれば== nullってのはメソッド名補完がきかないから、イヤンと考えるっていうことはありそうではあるなぁ。

_ 宣伝というか報告というか

日経ITProにコラムを書かせていただいています。

技術者からの視点ってやつで、仕様、設計、実装、開発プロセスあたりを書いていく予定です。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|

ジェズイットを見習え