Обычно, который лучше для использования?:
case n
when 'foo'
result = 'bar'
when 'peanut butter'
result = 'jelly'
when 'stack'
result = 'overflow'
return result
или
map = {'foo' => 'bar', 'peanut butter' => 'jelly', 'stack' => 'overflow'}
return map[n]
Строго говоря, когда я должен использовать операторы выбора и когда я должен просто использовать хеш?
Хеш - это структура данных, а оператор case - это управляющая структура.
Вам следует использовать хэш, когда вы просто извлекаете некоторые данные (как в приведенном вами примере). Если необходимо выполнить дополнительную логику, следует написать оператор case.
Кроме того, если вам нужно выполнить какое-то сопоставление с образцом, имеет смысл использовать оператор case:
#pattern matching using ranges
letterGrade = case score
when 0..64 then "F"
when 65..69 then "D"
when 70..79 then "C"
when 80..89 then "B"
when 90..100 then "A"
else "Invalid Score"
end
#pattern matching using regular expressions
case songData
when /title=(.*)/
puts "Song title: #$1"
when /track=(.*)/
puts "Track number: #$1"
when /artist=(.*)/
puts "Artist name: #$1"
end
Вообще, "лучше" в программировании означает разные вещи. Например, лучшая программа
и т.д.
Поскольку мы говорим о Ruby, производительность, как правило, имеет меньшее значение. Если вам действительно нужна производительность, вы можете рассмотреть другой язык программирования. Итак, я бы сначала рассмотрел критерии (1) и (2). Лучше выглядящий код на Ruby обычно представляет собой "лучшую" программу. Какой код выглядит лучше? Какой лучше выражает замысел? Что будет легче модифицировать, если вы добавите или уберете логику? Это зависит от вашей задачи, и это дело вкуса, в определенной степени.
На мой взгляд, в вашем коротком примере решение с хэшем лучше. Решение с кейсом обеспечивает большую гибкость, которая вам не нужна в данном случае (но может понадобиться в других случаях).