dev/mom0tomo

技術メモ

tryとtry!とぼっち演算子(&.)でレシーバがnilのときのエラーに対処する

読んだもの

sakurawi.hateblo.jp

qiita.com

学んだこと

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の場合、 trytry!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"