pockestrap

Programmer's memo

`Style/EmptyBlockParameter`(と`Style/EmptyLambdaParameter`)を作った

github.com

Style/EmptyBlockParameterStyle/EmptyLambdaParameterというRuboCopのCopをだいぶ前に追加した。後者はおまけ

なにこれ

Rubyでは、ブロック引数が存在しない場合でもバー(|)を書くことが出来る。

foo.do_something do
  foobar
end

# 上の式とこれは等しい
foo.do_something do ||
  foobar
end

これは両方とも同じ動作をする1

Style/EmptyBlockParameterは、上記のコードの2番目のブロックの書き方を警告し、1番目の書き方で書きましょうと推奨する。

Style/EmptyBlockParameterを無視して良いケース

ブロック引数が存在しなくてもバーを書きたいスタイルの人は、無視をすると良いと思う。 ただし、Rubyではこのようなケースでバーを書くスタイルは極めて一般的ではないと思われる2。 そのため、Ruby入門者の方などで「どっちのスタイルで書けばいいんだろう……」と悩んだ時は、バーを書かないスタイルに統一をしたほうが良いであろう。

Style/EmptyLambdaParameter(おまけ)

このCopはStyle/EmptyBlockParameterを作っている時に出来た副産物である。 このCopは、ラムダに引数がない時にカッコを省略するべきだと警告を出す。

# 警告が出る
-> () {
  do_something
}

# 警告が出ない
-> {
  do_something
}

これはどっちのスタイルの方がよいのかよくわからないので、Copに従うかどうかは好きにしたら良いと思う。


Style/EmptyBlockParameter(及びStyle/EmptyLambdaParameter)はRuboCopの次期リリース(恐らく0.52.0)から使用することが出来ます。


  1. ちゃんと調べてないから、もしかしたらarityの違いとかあるかも知れない

  2. https://github.com/ruby/rubyソースコードにこのCopをかけても32件しか警告が出ず、それも全てテストコードだった。ここからもバーを書くスタイルは一般的ではないだろうということが推察できる。