Effective Ruby: 項目2 nilオブジェクトのNoMethodError対策

セクションごとに記事を書いていくつもりはなかったのですが、良いこと書いているなと思ったので。
 

項目2 オブジェクトを扱うときにはnilかもしれないということを忘れないようにしよう

nilオブジェクトのNoMethodErrorに出くわすことはしばしばありますが、その対策について。
明示的な変換であるto_ato_iArray#compactについて。

def fix_title(title)
  title.to_s.capitalize
end

>> nil.to_a
=> []
>> nil.to_i
=> 0
>> nil.to_f
=> 0.0

name = [first, middle, last].compact.join("")

個人的には以下のようにmatchの結果を取り出す際に利用していたりいます。

text.match(/some_regexp/).to_a[1])

覚えておくべき事項

  • Rubyの型システムの構造上、全てのオブジェクトがnilになり得る。
  • nil?メソッドは、レシーバがnilならtrue、そうでなければfalseを返す。
  • 適切なら、to_sto_iなどの変換メソッドを使ってnilオブジェクトを強制的に型変換しよう。
  • Array#compactメソッドは、レシーバーのコピーからすべてのnil要素を取り除いた形を返す。

Effective Ruby

Effective Ruby