Tech Racho エンジニアの「?」を「!」に。
  • 開発

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


github.com/rubocop-hq/rubocopより

こんにちは、hachi8833です。以下の「Rubyスタイルガイド」記事の元であるRubocopスタイルガイドをチェックしたところ、いくつか追加更新がありましたので、スペースなどのトリビアな修正以外のものをリストアップしてみました。更新は以下のRubyスタイルガイドにも反映しました。

【保存版】Rubyスタイルガイド(日本語・解説付き)総もくじ

追加されたスタイル

キーワード引数に関するスタイルが追加されています。Rubyコミッターが審議中の「キーワード引数の現状と将来構想 - HackMD」と直接関連しているかどうかはわかりませんが、いわゆる=を使うデフォルト値付き引数やopt={}のようなオプションハッシュ引数の位置付けが下がり、キーワード引数が推奨されつつある流れのように思えます。

追加1. メソッドの引数に論理値を渡す場合はキーワード引数を使うこと

# 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. オプション引数(デフォルト値付き引数)よりキーワード引数が望ましい

# 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項演算子の定義」の記述が追加

3-12【統一】2項演算子の定義では引数をotherに揃えるに該当します。

2項演算子や演算子的なメソッドを定義する場合、右辺と左辺がセマンティクス上対称(同じまたはcoercion可能)であればパラメータ名をotherで統一する。
* セマンティクスが対称な演算子または演算子的メソッド(引数をotherにすべき): +-*/%**==><|&^eql?equal?
* セマンティクスが非対称な演算子(引数をotherにすべきではない): <<[]===
このルールは、演算子の両辺のセマンティクスが同じ場合にのみ適用すること。Rubyコアでの重要な例外としてはArray#*(int)がある。
ruby-style-guideより大意

# good
def +(other)
  # (略)
end

# bad
def <<(other)
  @internal << other
end

# good
def <<(item)
  @internal << item
end

# bad
# ある文字列を`other`倍したものを返す
def *(other)
  # (略)
end

# good
# ある文字列を`num`倍したものを返す
def *(num)
  # (略)
end

更新2. APIドキュメントの指定がRDocからYARDに変更された

1-22【統一】APIドキュメントにはYARDを使う」に反映しました。

ツィートより

関連記事

【保存版】Rubyスタイルガイド(日本語・解説付き)総もくじ

Railsフレームワークで多用される「options = {} 」引数は軽々しく真似しない方がいいという話


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。