Ruby: Rubocopスタイルガイドの最近の更新: オプション引数 options = {} が非推奨化など

github.com/rubocop-hq/rubocopより こんにちは、hachi8833です。以下の「Rubyスタイルガイド」記事の元であるRubocopスタイルガイドをチェックしたところ、いくつか追加更新がありましたので、スペースなどのトリビアな修正以外のものをリストアップしてみました。更新は以下のRubyスタイルガイドにも反映しました。 【保存版】Rubyスタイルガイド(日本語・解説付き)総もくじ 追加されたスタイル キーワード引数に関するスタイルが追加されています。Rubyコミッターが審議中の「キーワード引数の現状と将来構想 - HackMD」と直接関連しているかどうかはわかりませんが、いわゆる=を使うデフォルト値付き引数やopt={}のようなオプションハッシュ引数の位置付けが下がり、キーワード引数が推奨されつつある流れのように思えます。 ⚓追加1. メソッドの引数に論理値を渡す場合はキーワード引数を使うこと PR: keyword arguments for boolean arguments by ruba-ruba · Pull Request #509 · rubocop-hq/ruby-style-guide commit: Refine a rule · rubocop-hq/ruby-style-guide@341fc30 # bad def some_method(bar = false) puts bar end # bad – これはキーワード引数導入前によく用いられていたハック def some_method(options = {}) bar = options.fetch(:bar, false) puts bar end # good def some_method(bar: false) puts bar end some_method # => false some_method(bar: true) # => true bar = falseというデフォルト値付き引数での指定がbadとされています。Rubocopのdefault.ymlにはまだそれらしいものが見当たりません。 ⚓追加2. オプション引数(デフォルト値付き引数)よりキーワード引数が望ましい PR: keyword arguments for boolean arguments by ruba-ruba · Pull Request #509 · rubocop-hq/ruby-style-guide commit: Prefer keyword arguments over optional arguments · rubocop-hq/ruby-style-guide@508e506 # bad def some_method(a, b = 5, c = 1) # (略) end # good def some_method(a, b: 5, c: 1) # (略) end b = 5のようなデフォルト値付き引数がbadとされています。Rubocopのdefault.ymlにはそれらしいものはありませんが、Rails向けのHttpPositionalArgumentsが近いようです。 Rails/HttpPositionalArguments: Description: ‘Use keyword arguments instead of positional arguments in http method calls.’ Enabled: true VersionAdded: 0.44 Include: – ‘spec/**/*’ – ‘test/**/*’ 更新されたスタイル ⚓更新1.「2項演算子の定義」の記述が追加 commit: Update operand name rule for binary operators (#728) · rubocop-hq/ruby-style-guide@517bc5a 3-12【統一】2項演算子の定義では引数をotherに揃えるに該当します。 2項演算子や演算子的なメソッドを定義する場合、右辺と左辺がセマンティクス上対称(同じまたはcoercion可能)であればパラメータ名をotherで統一する。 * セマンティクスが対称な演算子または演算子的メソッド(引数をotherにすべき): +、-、*、/、%、**、==、>、<、|、&、^、eql?、equal? * セマンティクスが非対称な演算子(引数をotherにすべきではない): <<、[]、=== このルールは、演算子の両辺のセマンティクスが同じ場合にのみ適用すること。Rubyコアでの重要な例外としてはArray#*(int)がある。 ruby-style-guideより大意 # good def +(other) # (略) end # bad def … Continue reading Ruby: Rubocopスタイルガイドの最近の更新: オプション引数 options = {} が非推奨化など