就个人而言,我认为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
虽然我必须承认我仍然觉得第一个最容易阅读。
由于这基本上是一个映射表,我会尝试将其格式化,以便每个读取代码的人立即看到“table-ness”:
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