もりきゅうです。 ARAI Shunichi wrote: > Rubyでプログラムを書いていて、 > もっともよくおこるエラーは、nilに関するものです。 > > なにかの値が空であることを表すのに、 > nilを使うべきなのか、0や空配列などを使うべきなのか、 > ちょっと悩んでいます。 > > nilを使うと、不用意に比較したりしたときに例外になって > しまいます。nilを使わない場合、簡単に > if object > としたときにtrueになってしまいますので、いちいち > オブジェクトにあわせて比較してやらねばなりません。 よくあるのは array, hash, string に empty? を使ったときに nil がくるから if v.nil? || v.empty? と書かないといけないのが面倒、というパターンだと思います。 そこで、ここでは Rails (actionsupport) の blank.rb を紹介します。 http://dev.rubyonrails.org/browser/trunk/activesupport/lib/active_support/core_ext/blank.rb これを使えば if v.blank? と書けてうれしい。 ほかのパターンとしては、array, hash の入れ子のアクセスがあると思います。 例えば、入れ子の hash として扱う h があるとき、h[:a] が nil である場合を 考慮して if h[:a] && h[:a][:b] と書かないといけないのが面倒です。 これは h = Hash.new {|hash, key| hash[key] = {} } このように h を作っておけば key に :a がないとき h[:a] すると自動的に h[:a] = {} になりますから if h[:a][:b] と書けます。 ただし key の存在を検査するときは h.key?(:a) などとする必要があります。