NoMethodError と NullPointerException

Rubyぬるぽがないですねみたいな。

javaぬるぽ

Javaの例外のひとつに『NullPointerException』ってあります。いわゆる『ぬるぽ』です。

この『ぬるぽ』は、Nullが入っている参照型変数を参照しようとすると発生するようです。

Unko normal = null;
nomal.owner();   //NullPointerException

(http://ja.wikipedia.org/wiki/NullPointerException)
ちなみに、"Null"というのは初期化されていない状態のようです。どの番地を指しているかわからないのでしょう。

余談ですが、
C言語で、初期化していないポインタを使うのは危険!と習いました。
javaでも同様に、初期化していない(Null)領域を参照すると危険なのでしょう。
そのため、NullPointerExceptionが発生すると考えます。C言語を踏襲している感じがします。

Rubyでのぬるぽは?

Rubyでは、この『ぬるぽ』という例外を見ません。
なぜだろう?と一時期考えていました。
その時出た結論は、NullPointerException方言のようなもので、
言語によって、発生原理は同じでも表示される例外名は異なる。
そして、Rubyでの『ぬるぽ』はNoMethodErrorと言うのだろうと。

まったく違いました

Rubyには『ぬるぽ』は起きないのです。
なぜなら、すべてがオブジェクトだからです。

normal = nil;
normal.owner();   #NoMethodError

NoMethodErrorは、オブジェクトにそのようなメソッドはありません、という例外です。
Null(Nil)はオブジェクトだそうです。falseもtrueもオブジェクト。


みんな違って、みんないい。