Ruby,价值优惠,美化代码

Ser*_*sev 1 ruby

所以我有这个代码:

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中,我宁愿使用更独立的方式.

rds*_*oze 6

一种方法是使用案例

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)