Это самый оптимальный способ написания кода на Ruby? - PullRequest
0 голосов
/ 31 марта 2011

Есть ли лучший способ написать этот код на Ruby? Пожалуйста, помогите рефакторинг.

def get_code(val)
    case val
    when 0..20 then 'E2'
    when 20..32 then 'E1'
    when 33..40 then 'D'
    when 41..50 then 'C2'
    when 51..60 then 'C1'
    when 61..70 then 'B2'
    when 71..80 then 'B1'
    when 81..90 then 'A2'
    when 91..100 then 'A1'
    else 'A0'
    end
 end

Ответы [ 4 ]

2 голосов
/ 31 марта 2011

Ваш код довольно хорош.Для развлечения вы можете использовать хеш вместо case.

def get_code(val)
  my_hash = { 0..20 => 'E2',
    20..32 => 'E1',
    33..40 => 'D',
    41..50 => 'C2',
    51..60 => 'C1',
    61..70 => 'B2',
    71..80 => 'B1',
    81..90 => 'A2',
    91..100 => 'A1' }
  my_hash.select{ |k, v| k === val }.first[1] rescue 'A0'
end

или сделать его более встроенным:)

def get_code(val)
  { 0..20 => 'E2', 20..32 => 'E1', 33..40 => 'D', 41..50 => 'C2', 51..60 => 'C1', 61..70 => 'B2', 71..80 => 'B1', 81..90 => 'A2', 91..100 => 'A1' }.select{ |k, v| k === val }.first[1] rescue 'A0'
end

и, как заметил @Geo, вы должны извлечь свой хешвне метода.

1 голос
/ 01 апреля 2011

Не рефакторинг, просто более короткий способ написать это:

def get_code(val)
    case val
    when 0..20
      'E2'
    when 20..32
      'E1'
    when 33..40
      'D'
    when 41..50
      'C2'
    # etc.
    else
      'A0'
    end
 end

Или вы можете заменить затем точкой с запятой:

case val
  when  0..20; 'E2'
  when 20..32; 'E1'
  #etc
  else 'A0'
end
1 голос
/ 31 марта 2011
def get_code(val)
    if [31, 32].include?(val) then 'E1'
    else ['E2', 'E2', 'E1', 'D', 'C2', 'C1', 'B2', 'B1', 'A2', 'A1'][(val-1)/10] || 'A0'
    end
end

Я не уверен, как вы справляетесь с 0, негативами. Похоже, система оценок. Если в моем коде есть ошибка, думаю, вы сможете исправить ее.

Обновление Другая версия:

def get_code(val)
    val += 1 if 0 == val
    val -= 2 if [31, 32].include?(val)
    ['E2', 'E2', 'E1', 'D', 'C2', 'C1', 'B2', 'B1', 'A2', 'A1'][(val-1)/10] || 'A0'
end
1 голос
/ 31 марта 2011

Если это единственный экземпляр этого шаблона, то его не стоит сокращать; это совершенно ясно и не очень шумно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...