Используйте хеш или оператор выбора [Ruby]

Обычно, который лучше для использования?:

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]

Строго говоря, когда я должен использовать операторы выбора и когда я должен просто использовать хеш?

6
задан user94154 9 May 2010 в 20:29
поделиться

2 ответа

Хеш - это структура данных, а оператор 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


11
ответ дан 8 December 2019 в 05:53
поделиться

Вообще, "лучше" в программировании означает разные вещи. Например, лучшая программа

  1. легче для понимания, т.е. лучше выражает замысел
  2. легче поддерживать. Например, меньше строк кода, меньше подвержена ошибкам и т.д.
  3. имеет лучшую производительность, в терминах время выполнения
  4. имеет лучшую производительность, с точки зрения использования памяти

и т.д.

Поскольку мы говорим о Ruby, производительность, как правило, имеет меньшее значение. Если вам действительно нужна производительность, вы можете рассмотреть другой язык программирования. Итак, я бы сначала рассмотрел критерии (1) и (2). Лучше выглядящий код на Ruby обычно представляет собой "лучшую" программу. Какой код выглядит лучше? Какой лучше выражает замысел? Что будет легче модифицировать, если вы добавите или уберете логику? Это зависит от вашей задачи, и это дело вкуса, в определенной степени.

На мой взгляд, в вашем коротком примере решение с хэшем лучше. Решение с кейсом обеспечивает большую гибкость, которая вам не нужна в данном случае (но может понадобиться в других случаях).

8
ответ дан 8 December 2019 в 05:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: