个人认为
else
是不必要的。由于这个问题被标记为
[language-agnostic]
,我将提供一些例子来说明我的写法:
def temperature_message(temp)
return 'Freezing' if temp < 32
return 'Brr' if temp < 60
return 'Comfortable' if temp < 80
'Too hot'
end
这是典型的守卫条款风格,我个人和整个 Ruby 社区都经常使用。
def temperature_message(temp)
case
when temp < 32
'Freezing'
when temp < 60
'Brr'
when temp < 80
'Comfortable'
else
'Too hot'
end
end
这是一个典型的switch
,你可以在一些不太强大的语言中找到它。这可能是我不会使用的一种,我会像这样重构它:
def temperature_message(temp)
case temp
when (-1.0/0.0)...32
'Freezing'
when 32...60
'Brr'
when 60...80
'Comfortable'
else
'Too hot'
end
end
虽然我必须承认,我仍然觉得第一种最容易读懂。
既然这基本上是一个映射表,我会尝试格式化它,以便每个阅读代码的人都能立即看到“表”的特征:
def temperature_message(temp)
case temp
when (-1.0/0.0)...32 then 'Freezing'
when 32...60 then 'Brr'
when 60...80 then 'Comfortable'
else 'Too hot'
end
end
这同样适用于您的原始Java实现:
public String getTemperatureMessage(double temp) {
if(temp < 32) return "Freezing";
if(temp < 60) return "Brr";
if(temp < 80) return "Comfortable";
else return "Too hot";
}
当然,由于它基本上是一个映射表,你可以将其实现为一个映射。
def temperature_message(temp)
{
(-1.0/0.0)...32 => 'Freezing',
32...60 => 'Brr',
60...80 => 'Comfortable',
80..(1.0/0.0) => 'Too hot'
}.detect {|range, _| range.include?(temp) }.last
end