Array()を使ったnilガード

Ruby Weekly経由。Array()を使ったnilガードを紹介しているGuarding with arraysという記事がナイスでした。

Array()を使ったnilガード

Rubyでのコーディングは常にnilとの戦いなのであります。

例えばparams[:pictures]に配列が入ってくると期待して、こんなコードを書くと、

params[:pictures].each do |picture_id|
  # なんか処理がある
end

params[:pictures]がnilのときにエラーになりますよね。なのでこんな風に書いたりするんですが、ちょいダサい。

(params[:pictures].presence || []).each do |picture_id|
  # なんか処理がある
end

で、Guarding with arraysで紹介されている方法が、こんな書き方。

Array(params[:pictures]).each do |picture_id|
  # なんか処理がある
end

Array()の以下のような性質を活かした方法で、見た目にもArray感があって良い感じです。

Array([1,2,3])
# => [1,2,3]

Array(nil)
# => []