在Ruby中重构if-else
有没有办法重构这段代码并使其更干净?你能用更少的布尔数来解决这个问题吗在Ruby中重构if-else,ruby,if-statement,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 && gra
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
def get_grade(grade_num)
如果等级数量>100
return“请输入一个介于0和100之间的数字”
elsif等级_num=90
返回“A”
elsif等级数量<90和等级数量>=80
返回“B”
elsif等级数量<80和等级数量>=70
返回“C”
elsif等级数量<70和等级数量>=60
返回'D'
elsif等级数量<60
返回“F”
终止
终止
使用范围
和案例
语句怎么样
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
使用
Range
和case
语句怎么样
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
对于效率至上的大型课程:
GRADES = {
( 0...60) => "Fail",
(60...70) => "D",
(70...80) => "C",
(80...90) => "B",
(90..100) => "A" }
TO_MARK = GRADES.flat_map { |r,mark| r.to_a.product([mark]) }.to_h
#=> {0=>"Fail", 1=>"Fail",..., 59=>"Fail", 60=>"D",..., 69=>"D",
# 70=>"C",..., 79=>"C", 80=>"B",..., 89=>"B", 90=>"A",..., 100=>"A"}
TO_MARK[33] #=> "Fail"
TO_MARK[65] #=> "D"
TO_MARK[80] #=> "B"
TO_MARK[90] #=> "A"
对于效率至上的大型课程:
GRADES = {
( 0...60) => "Fail",
(60...70) => "D",
(70...80) => "C",
(80...90) => "B",
(90..100) => "A" }
TO_MARK = GRADES.flat_map { |r,mark| r.to_a.product([mark]) }.to_h
#=> {0=>"Fail", 1=>"Fail",..., 59=>"Fail", 60=>"D",..., 69=>"D",
# 70=>"C",..., 79=>"C", 80=>"B",..., 89=>"B", 90=>"A",..., 100=>"A"}
TO_MARK[33] #=> "Fail"
TO_MARK[65] #=> "D"
TO_MARK[80] #=> "B"
TO_MARK[90] #=> "A"
啊。不幸的是,没有人在这两者之间使用
代码>。我喜欢grade.between?(1100)
比(1..100)好。cover?(grade)
@steenslag:TILbetween
好得多。谢谢。如果0到100是可接受的值,您不希望最小/最大值为等级。介于?(0,100)
之间吗?此外,在列出的四种情况中,有两种情况下的值为90、80和70。可能希望这些范围是80…89
,70…79
,和50…69
。你一直都是个软蛋。虽然OP已将通过门槛设置为60,但您已将其降至50。我更喜欢cover?
,因为不熟悉的人(像我一样)可能不知道它是包含还是不包含终点,而(对我来说)cover?
听起来是包含的。@digijim:一个有三个点的范围,如80…90
排除了最后一个元素。啊。不幸的是,没有人在这两者之间使用代码>。我喜欢grade.between?(1100)
比(1..100)好。cover?(grade)
@steenslag:TILbetween
好得多。谢谢。如果0到100是可接受的值,您不希望最小/最大值为等级。介于?(0,100)
之间吗?此外,在列出的四种情况中,有两种情况下的值为90、80和70。可能希望这些范围是80…89
,70…79
,和50…69
。你一直都是个软蛋。虽然OP已将通过门槛设置为60,但您已将其降至50。我更喜欢cover?
,因为不熟悉的人(像我一样)可能不知道它是包含还是不包含终点,而(对我来说)cover?
听起来是包含的。@digijim:一个有三个点的范围,如80…90
排除了最后一个元素。