🤖
RubocopでConsider replacing case-when with a hash lookupが出たときの対処
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がこちら。
「無駄にトップレベルの定数を作らないほうがいい」「CASE文でもよくない?」といった議論があって興味深いです。
Discussion