技術ブログ

(技術系中心)基本自分用備忘録なので、あくまで参考程度でお願いします。

tryメソッド

tryメソッド

Railsコードの中にtryメソッドを発見。最初はRubyのメソッドと思ったけどRailsが用意しているメソッドらしい。

使用用途

使用用途はいたって簡単でオブジェクトがnilでない場合のみ、そのオブジェクトのメソッドを実行したい!時に使う これを使うことによって、オブジェクトがnilの時にメソッドを使ってエラーを吐いてしまうのを防ぐことができます。

qiita.com

使用例

return true if item.try(:item_images).nil?

この場合はitem(商品)がitem_images(商品画像)を持っていない場合にtrueを返す。という意図のコードである。

tryとtry!の違い

  a.try(:hoge)  #=> nil
  a.try!(:hoge) #=> NoMethodError

try と try! の使い分け - Qiita

[2020/2/4追記]

tryと&.の違い

両方ともレシーバが nil ではない場合にメソッドを呼び出すという目的なんですが、具体的な挙動は少し違います。

具体的にいうと

&.が『nilでない場合にメソッドを呼び出す』のに対して、#try は『メソッドを呼び出すことができるときにメソッドを呼び出す』

Ruby の &. と #try の違い - Secret Garden(Instrumental)

これだけではよくわからないのでコードで説明

# Stringオブジェクト("hoge")に定義されていないメソッドはnilになる
irb(main):314:0> "hoge".try(:to_fuga)
=> nil

# メソッドがない場合はNoMethodErrorが起きる
irb(main):002:0> "hoge"&.to_fuga
NoMethodError: undefined method `to_fuga' for "hoge":String

ちなみにtry!と&.はほぼ同じ挙動になる