Edited at

「&.」と「try」と「try!」

何番煎じか分かりませんがまとめてみました。


要約


  • 全部レシーバーが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メソッドの使い方をまとめてみた