🤖

RubocopでConsider replacing case-when with a hash lookupが出たときの対処

2022/10/20に公開

Rubocopを走らせた時、以下の提案が表示される場合がある。

Style/HashLikeCase: Consider replacing case-when with a hash lookup

Class: RuboCop::Cop::Style::HashLikeCase — Documentation for rubocop (1.36.0)

これは例えば、以下のようなcase文を書いているときに指摘される。

def say_hello(language)
  case language
  when 'japanese' then 'こんにちは'
  when 'english' then 'hello'
  when 'french' then 'bonjour'
  end
end

「hash lookupを使ってみたら?」と提案されているとおり、Hashを使った形に書き換えるとこうなる。

LANGS = {
  'japanese' => 'こんにちは',
  'english' => 'hello',
  'french' => 'bonjour'
}.freeze

def say_hello(language)
  LANGS[language]
end

わかりやすくなっていい感じですね。

ちなみにこのCopが実装される経緯となったIssueがこちら。

https://github.com/rubocop/rubocop/pull/8280

「無駄にトップレベルの定数を作らないほうがいい」「CASE文でもよくない?」といった議論があって興味深いです。

Discussion