もりきゅうです。

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) などとする必要があります。