LoginSignup
6
6

More than 5 years have passed since last update.

Railsの存在演算子で、undefined local variable エラーを簡単に回避する

Posted at

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はメソッドなので演算子ではありません)

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6