所以我有这个代码:
def self.age_to_bucket(age)
age = age.to_i
if age >= 0 && age <= 12
1
elsif age >= 13 && age <= 17
2
elsif age >= 18 && age <= 24
3
elsif age >= 25 && age <= 29
4
elsif age >= 30 && age <= 34
5
elsif age >= 35 && age <= 39
6
elsif age >= 40 && age <= 49
7
elsif age >= 50 && age <= 64
8
elsif age >= 65
9
else
0
end
end
Run Code Online (Sandbox Code Playgroud)
如何在不失去可读性的情况下改进此代码?
我知道我可以使用#in?范围,像这样:
if age.in? (0..12)
Run Code Online (Sandbox Code Playgroud)
但是#in?在ActiveSupport中,我宁愿使用更独立的方式.
一种方法是使用案例
result = case age
when 0..12 then 1
when 13..17 then 2
when 18..24 then 3
when 25..29 then 4
-------- so on
else 0
end
Run Code Online (Sandbox Code Playgroud)
另一种方法是消除条件中的冗余&&.
if age < 0
0
elsif age < 13
1
elsif age < 18
2
elsif age < 25
3
elsif age < 30
4
elsif age < 35
5
elsif age < 40
6
elsif age < 50
7
elsif age < 65
8
else
9
Run Code Online (Sandbox Code Playgroud)