重构如果elsif在Ruby中

arj*_*s02 1 ruby if-statement

有没有办法重构这个代码并使其更干净?你能用更少的布尔来解决这个问题吗?

def get_grade(grade_num)
  if grade_num > 100
    return "Please enter a number between 0 and 100"
  elsif grade_num <=100 && grade_num >= 90
    return 'A'
  elsif grade_num < 90 && grade_num >= 80
    return 'B'
  elsif grade_num < 80 && grade_num >= 70
    return 'C'
  elsif grade_num < 70 && grade_num >= 60
    return 'D'
  elsif grade_num < 60
    return 'F'
  end
end 
Run Code Online (Sandbox Code Playgroud)

spi*_*ann 8

使用Rangecase声明怎么样?

def get_grade(grade)
  case grade
  when 90..100 then 'A'
  when 80...90 then 'B'
  when 70...80 then 'C'
  when 60...70 then 'D'
  when  0...60 then 'F'
  else      
    'Please enter a number between 0 and 100'
  end
end
Run Code Online (Sandbox Code Playgroud)

  • 啊.可悲的是,没有人使用`之间?`.我喜欢`grade.between?(1,100)`比`(1..100).cover?(等级)`更好 (2认同)