オブジェクトが存在するときにだけ処理をする

at 2016-01-09 06:29 (UTC)

みんな大好き Object#tap。でもこんなソースはあまり書きたくない。

foo.bar.baz.tap do |baz|
  do_something(baz) if baz
end

tap_if とかあれば便利じゃない?

foo.bar.baz.tap_if do |baz|
  do_something(baz)
end

# もしくは
foo.bar.tap_if(:baz) do |baz|
  do_something(baz)
end

似たようなことを考える人はいるものですでにある。→ tap-if | RubyGems.org | your community gem host
そして Rails やる上では try で事足りることがわかった。ブロック取れるのか。

foo.bar.baz.try do |baz|
  do_something(baz)
end

# もしくは
foo.bar.try(:baz) do |baz|
  do_something(baz)
end

結論:Object#try サイコー