毎日SEの技術ブログ

平日は社内SE、休みは自宅でサービス開発するSEの技術ブログ

method_missingを使ってnilを無視する

tryメソッドを使ってnilを無視できますが、tryをそもそもしたくない。

object.try(:method).try(:method)

とかやりたくないわけですよ。汚いから

NilClassでmethod_missingをオーバーライドする

class NilClass
  def method_missing(name, *args, &block)
    nil
  end
end

# どこまでも続けられるよ!
# nil.map(&:id).join(',').....

これでNilClassに存在しないメソッドが呼ばれるとnilを返すのでtryなんてしなくてもnilを無視できる!

ちなみに、これはnilに対してNoMethodErrorが発生しなくなり、想定しないnilが返ってくるバグが発生した時、原因が見つかりにくくなる諸刃の剣であるため注意。