Railsの存在演算子
CoffeeScriptでは存在演算子 ? を使うことによって、
null参照した時のエラーを簡単に回避することができます。
CoffeeScript
hoge.foo
# hoge = undefinedのときエラーが発生
hoge?.foo
# hoge = {foo: "bar"} のとき "bar"
# hoge = undefinedのときエラーが起きずに undefined
Rails+Coffeescriptで開発していると、なぜRubyにこのような演算子がないのかと思いますが、
実はRailsのActiveSupportの try というメソッドで同じ事ができます。
Ruby
hoge.foo
# hoge = nilのときエラーが発生
hoge.try(:foo)
# hoge.fooというメソッドが定義されているとき hoge.foo
# hoge = nilのときエラーが起きずに nil
hoge.try(:foo, 3, 4)
# hoge.foo(3, 4)と同値
# 2引数目以降に代入された引数はfooメソッドに代入される
hoge.try(:[], "bar")
# hoge["bar"]と同値
# 結構使うことが多い
Railsにおいては実際こんなかんじに使うことが多いです
Rails
user.picture.try(:url) || "http://デフォルトの画像"
# ユーザーが画像を持ってるときはそのURL、もしない場合はデフォルトの画像のURL
tryの実装
try
def try(*a, &b)
if a.empty? && block_given?
yield self
else
__send__(*a, &b)
end
end
(タイトルで存在演算子と言っていますが、tryはメソッドなので演算子ではありません)