RuboCopエラー対応(Layout/EmptyLineAfterGuardClause)
はじめに
Rails(Ruby)環境でコーディングをしていた際に、RuboCopでこんなエラーが出ました。
一部抜粋 & 編集
app/decorators/file_name.rb:63:5: C: Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
return something if method.nil?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuboCop とは?
Rubyのコードを整形してくれるやつです。
RuboCop is a Ruby static code analyzer and code formatter
自分が今回書いたコードの中身は、早期リターンを入れたelse付きの後置if文です。
def method_name
return "something" if method_A.nil?
method_B(引数)
end
コードの内容は単純で、method_A
の中身が nil
だったら文字列 "something"
を返し、そうじゃなければ、method_B(引数)
を実行する。という内容です。
早期returnとは?
あまり起きないケース、あるいは重要でないケースでifのネストを深くしたり、else句を使うのを避けるためのテクニックです。
引用
https://qiita.com/n_slender/items/e062454114facd00a942
RuboCopのエラーメッセージとその内容
上記コードでも動くのですが、RuboCop
的には正しくありません。
その時のエラー文が
app/decorators/file_name.rb:63:5: C: Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
return something if method.nil?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
でした
どう対応したか?
以下のようにコードを書き換えました。
def method_name
return "something" if method_A.nil?
method_B(引数)
end
なぜ、こう対応したか?
エラー文
Layout/EmptyLineAfterGuardClause
で、ググると、RuboCop
の公式ドキュメントが出てきます。
参考
https://www.rubydoc.info/gems/rubocop/RuboCop/Cop/Layout/EmptyLineAfterGuardClause
このページのOverviewには下記のように書いてあります。
This cop enforces empty line after guard clause
「このコップ(警察)は、ガード節の後には空行を必ずいれとけ」と、言っています。
なので、空行を入れました。
ガード節とは?
処理の対象外とする条件を関数やループの先頭に集め、早めに return や continue/break で抜ける方法です。ネストを減らし異常系と正常系の処理がわかりやすくなるメリットがあります。
引用
https://qiita.com/kouyan/items/7b8b456b626447a1e24e
なので、ガード節の下に空行入れました!
今日は以上です!
参考
Author And Source
この問題について(RuboCopエラー対応(Layout/EmptyLineAfterGuardClause)), 我々は、より多くの情報をここで見つけました https://qiita.com/ryosuketter/items/30b329b24c6dde3ae639著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .