🚫

【RuboCop】「Style/SafeNavigation」と「Layout/SpaceAroundMethodCallOperator」

2024/09/20に公開

はじめに

こんにちは、Takeです。都内の自社開発企業でエンジニアとして働いています。

RuboCopを使用していると、次のようなエラーに遭遇することがあります。その内容と解決法をすごく軽めに共有させていただきます。

エラー内容その1

Style/SafeNavigation: Use safe navigation (&.) instead of checking if an object exists before calling the method.

内容としては、メソッドを呼び出す前にオブジェクトが存在するか確認する代わりに、&.を使用してください。

該当コード

if user && user.authenticate(params[:session][:password])

修正方法

if user &. user.authenticate(params[:session][:password])

安全参照演算子:safe navigation operator
メソッド呼び出し構文においてレシーバーとメソッド名を結ぶ演算子の一つ「&.」。「.」と違う点は、レシーバーが nil のとき引数の評価もメソッド呼び出しも行わずに nil を返す、ということだけである。 Ruby 2.3 で導入された。俗に「ぼっち演算子」とも呼ばれる。

user = User.find_by(id: 123)
user&.email # userがnilでなければ、emailを返す

https://docs.ruby-lang.org/ja/latest/doc/glossary.html

エラー内容その2

Layout/SpaceAroundMethodCallOperator: Avoid using spaces around a method call operator.

内容としては、メソッド呼び出し演算子の前後にスペースを用いるのは避けてください。

該当コード

if user &. user.authenticate(params[:session][:password])

修正方法

if user&.user.authenticate(params[:session][:password])

&.前後のスペースを取り除きました。
これでRuboCopからの指摘はなくなりました。

今回は以上です!

参考

Style/SafeNavigation
https://www.rubydoc.info/gems/rubocop/0.43.0/RuboCop/Cop/Style/SafeNavigation

Layout/SpaceAroundMethodCallOperator
https://www.rubydoc.info/gems/rubocop/1.11.0/RuboCop/Cop/Layout/SpaceAroundMethodCallOperator

https://faw-nlily.com/rubyで使われる&アンパサンドの種類まとめ!/

Discussion