原です。 From: Sinichiro Dezawa <dezawa / miya.fujifilm.co.jp> > > 最近、「メソッドが nil に対して用意されていない事で例外が起こる」 > > という事が、ずいぶん便利に思えてきました。この例外が起こらない様 > > にプログラムを書くことで、論理がすっきりするみたいです。例えば > > わからん 。 > 詳しく説明してもらえます? いえ、別に難しいことを言っているんでは無くて、変な所に nil が 出てきたたら、その前のコードでバグを入れている可能性が高いと いうことです。 例えば fname = "/foo/bar" というファイルのベースのファイル名 を bar の文字数をカウントしたい時、 fname =~ /[^\/]+$/ print $&.length, "\n" と書けますが、これに fname = "/foo/bar/" を食わせると、例外で 止まります。つまりこれは、趣旨に合わない入力がなされている事 を教えてくれてるわけです。(Perl だったら素通しで 0 を返すで しょう。) fname = "/foo/bar/" のベースのファイル名の長さを 知っても意味が無いので、止まってくれていいわけです。この例外 が起こらないようにするには、ちゃんと入力になる fname が適切な 形をしているかどうかチェックを入れるか、例外捕捉をする事によっ て、そのコードで何をしたいかが鮮明になると思います。 前の例は > self =~ /(.)$/ > if $1 != nil && $1.size == 2 > original_chop! > end でしたが、「perl 書き」はしばしば、 self =~ /(.)$/ if $1.size == 2 original_chop! end と書くでしょう。しかし$1 が存在しないのに size を知りたがる のは実はおかしい事であり、本当は存在するときだけ知りたいの であるから、やはり if self =~ /(.)$/ if $1.size == 2 original_chop! end end と書くほうが、やりたいことが素直に出ている様に思います。まあ、 そのいいかげんさが Perl のいいところであるわけで、何事もバラ ンスの問題だけど。 foo が nil の時、 foo < "bar" は、やはり ruby に叱られるけれど、 出沢さんの様に意識的に nil を使っているのなら違いますが、多くの 場合、その前のアルゴリズムが間違っているんじゃないでしょうか。 それに nil をマイナス無限大にするのもかなり恣意的なもので、プラ ス無限大にしてほしい人も結構いるんじゃないかしら。 ---===-=-=-=-=-=-=-=-=======--=-=-=-==-=-===-=-=-=-=-=-=--=-==-=-- Shin-ichro Hara(Nagaoka Univ.of Tech.)