何番煎じか分かりませんがまとめてみました。
要約
- 全部レシーバーがnilの場合はnilを返す
- 「try」はメソッドを呼べる時だけメソッドを呼んでそれ以外の場合はnilを返す => 間違った実装に気づきにくい
- 「try!」と「&.」は同じ挙動
- 「try」「try!」はActive Supportのメソッド、「&.」はRubyの演算子
&.
通称ぼっち演算子(& ← 膝を抱えてうずくまっている人に見える)
- レシーバーがnilの場合はnilを返す
nil&.hoge # => レシーバーがnilなのでnilを返す
- それ以外はメソッドを呼ぼうとする
10&.hoge # => レシーバーがnilではないのでNoMethodError
try
- レシーバーがnilの場合nilを返す
nil.try(:hoge) # => レシーバーがnilなのでnilを返す
- レシーバーにそのメソッドが無い場合もnilを返す
10.try(:hoge) # => 整数型にhogeメソッドはないのでnilを返す
try!
- 「&.」と同じ挙動をする
違いは?
- 「try」はNoMethodErrorにならない
「try」はメソッドを呼べる時だけ呼んでそれ以外はnilを返すようになっています。
場合によるとは思いますがNoMethodErrorになるような間違った実装に気づきにくいのは良くなさそうです。
- 「try」「try!」はActive Supportのメソッド、「&.」はRubyの演算子
「try」「try!」はRuby単体では使えません。
まとめ
「try!」を使う場面はあまり無さそう(Ruby単体で使える「&.」で良い)
参考
【Ruby on Rails】tryとtry!と&.(ぼっち演算子)の違い
Railsでよく使う、tryメソッドの使い方をまとめてみた