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

[jfriends-ml 1592] null はオブジェクト ?



前橋です。

木下さん:
>>そのかわり、nullはどうしよう? と思うし、また、
>
>オブジェクトからひもが映えてても説明出来ないような^^

変数がひもの端っこをくわえ込むフォルダだとして、何も
くわえてない状態がnullです。

>ちなみに私はnullもオブジェクトということでこの点問題にしません
>:P

で、ここなんですが、以前JavaHouseに投げようとしてうまく
書けずにオクラになってたメイルから抜粋しますと (^^;

>null オブジェクトのインスタンスメソッドの呼び出し 
>null オブジェクトのフィールドに対するアクセスまたは変更 
>null の長さを配列であるかのように取得 
>null のスロットを配列であるかのようにアクセスまたは修正 
>null を Throwable 値であるかのようにスロー 
>null オブジェクトの不正な使用を示す場合は、このクラスのインスタンスを
>アプリケーション側でスローするようにしてください。 

確かにAPIリファレンスのNullPointerExceptionの所には上記のように
書いてあるんですけど、私的には「nullオブジェクト」という言葉に
違和感を感じます。nullというのは参照の取りうるひとつの値であって、
オブジェクトではないんじゃないかと。

というわけで、言語仕様を見てみたら、
http://www.y-adagio.com/public/standards/tr_javalang/4.doc.htm#9317

| 式 null の型である特別な 空型(null type) も存在する。それには
| 名前がない。空型には名前がないので,空型の変数を宣言すること又は
| 空型にキャストすることはできない。空型の式が取りうる唯一の値が空
| 参照となる。 空参照は,常に任意の参照型にキャストできる。実際に
| は,Javaプログラマは,空型を無視し,空型は任意の参照型となれる
| 単なる特別なリテラルであると見なしても良い。 

ああなんだかさっぱりわからん。null typeって?

ただ、null typeの取りうる唯一の「値」が空参照だそうですから、
やっぱり「参照の値」なんじゃないでしょうか? そして、そこに
オブジェクトはいない、と。

># 言語仕様にはそうは書いてなかったですけど^^;;厳密に考えると妙な
># 部分もあったと思いますがほとんどのことは説明可能という意味で
>未初期化とnullはもちろん別視するんですよね。未初期化はひもがどこ
>にもくっついてなくて、nullはnullオブジェクトにくっついてる、と
>^^。

私は「未初期化」とnullは区別してません。まあ、C だと未初期化は
ゴミが入っていたりして大変ですが、それは C の「都合」であって、
ちゃんとした言語なら nullにしといてくれますよね?

>Rubyとして如何なのかの正確なところは、前田さんやまつもとさんに直
>接聞いたほうがいいでしょうね。私はfjあんまり見れる環境じゃないで
>すけど前橋さんfj.comp.oopsに出張しません?:)

今頃、その話題を振るのもアレですよねえ。

今後、なるべくチェックするようにします。量が少ないから簡単 (^^;
# fj.comp.lang.c を読むのが辛くなってきた... (-_-;;

>初心者がより抽象的な理解をすんなりできるようなら、(Javaじゃ駄目だ
>けど)いいなぁと妄想にふけります。

本のほうにも書きましたが、私は「やっぱり低レベルな話の方が
理解が早い」と思っています。

抽象的な話が通じる初心者って... いませんよねえ。

初心者どころか、(自称)ベテランでもさっぱりな人がたくさん... (;_;)

------------------------------------------------------------
  前橋 和弥              maebashi@xxxxxxxxx
                         http://member.nifty.ne.jp/maebashi/
------------------------------------------------------------