tryとtry!とぼっち演算子(&.)でレシーバがnilのときのエラーに対処する
読んだもの
学んだこと
tryとtry!とぼっち演算子(&.)は、レシーバがnilのときのエラーに対処する為に使う。
try
user.try(:name)
レシーバであるuserがnilでないなら、メソッドを実行する。
レシーバとは、hoge.methodと書かれている場合のhoge部分のこと。
tryメソッドを使用することで、下記のようにメソッドの記述を簡略化できる。
if @user.nil? @user = @user.find_by(:id) end # tryを使って簡略化する @user.try(:name)
try!
レシーバがnilの場合、 try
も try!
もnilを返す。
違いはメソッドが存在しない場合にある。
try!
はメソッド自体が定義されていない場合にはエラーを返す。(NoMethodErorr)
tryはnilを返す。
NoMethodErorrを捕捉したい場合は try!
を使う。
ぼっち演算子(&.)
try!
と同様の処理をする。
# try!を使う場合 user.try!(:name) # ぼっち演算子を使う場合 user&.(:name)
.try(:[], :hoge)
という書き方について
user = {name: 'taro'} user.try(:[], :name)
こういう書き方ができる。
これは、[]がメソッドであるということを利用している。
下記のコードは上下で同じ挙動になる。
user[:name] # => "taro" user.[] :name # => "taro"