【Ruby】ぼっち演算子とは?

ぼっち演算子の使い方をすっかり忘れていたのでまとめておきます。

結論

ぼっち演算子&. とはレシーバーがnil だった場合にNoMethodError ではなくnil を返すRubyのメソッド呼び出しの演算子です。

メソッド呼び出しで .の代わりに &.を使うことができます。この形式でメソッドを呼びだそうとすると、レシーバが nil の場合は以下のように働きます。


・ 引数の評価が行なわれない
・メソッド呼び出しが行われない
nil を返す

レシーバが nil でない場合は通常のメソッド呼び出しが行われます。

メソッド呼び出し(super・ブロック付き・yield) (Ruby 3.2 リファレンスマニュアル)

nil の可能性のあるオブジェクトのメソッド呼び出しでNoMethodError を出させたくない場面で活躍しそうです。

使い方

使い方はメソッド呼び出しの. の代わりに&. を使うだけです。

例) 本の名前を出力をするname メソッドを呼び出す

> book = nil

# .で呼び出す
> book.name
=> `<main>': undefined method `name' for nil:NilClass (NoMethodError)

# &.で呼び出す
> book&.name
=> nil

ぼっち演算子&.nil をレシーバとしてメソッド呼び出しを行った場合は返り値がNoMethodError ではなくnil になっているのが分かると思います。

Railsのtryメソッドより高速らしい

Rubyのぼっち演算子&. と同じ動作をするメソッドとしてRailstry メソッドがあります。 処理速度はRubyのぼっち演算子&. の方が高速らしいです。

Rubyのぼっち演算子はRailsの`Object#try`より高速(翻訳)|TechRacho by BPS株式会社

感想

久しぶりにRubyに触れた気がした。 ガンガン使って体で覚えていこう。

参照

【Rails】エラーハンドリングに役立つぼっち演算子(.&)とtry(try!)メソッドについて|TechTechMedia

try | Railsドキュメント

Rubyのぼっち演算子はRailsの`Object#try`より高速(翻訳)|TechRacho by BPS株式会社

メソッド呼び出し(super・ブロック付き・yield) (Ruby 3.2 リファレンスマニュアル)