旧的(也是“已回答”的)问题,但是我会花两分钱作为答案。
TL; DR-不必这样做,但是在某些情况下,它可使您的代码更加清晰。
尽管不使用显式返回可能是“ Ruby方式”,但它使使用不熟悉的代码或不熟悉Ruby的功能的程序员感到困惑。
这是一个有些人为的示例,但是想象一下有一个像这样的小功能,该功能在传递的数字上加一个,然后将其分配给实例变量。
def plus_one_to_y(x)
@y = x + 1
end
这是否意味着要返回一个值的函数?很难说出开发人员的含义,因为它既分配了实例变量,又返回了分配的值。
假设很久以后,另一个程序员(也许不太熟悉Ruby如何根据所执行的最后一行代码返回结果)就想输入一些print语句进行记录,该函数就变成了……
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
end
现在,如果有任何期望返回值的函数,该函数将被破坏。如果没有什么期望返回值,那很好。显然,如果在代码链中更远的某个地方,调用此函数期望返回值,那么它将失败,因为它没有恢复到期望的值。
现在真正的问题是:真的有什么期望返回值吗?这有什么坏处吗?将来会不会破坏某些东西?谁知道!只有对所有调用的完整代码审查才能让您知道。
因此,至少对我而言,最佳实践方法是非常明确地指出,如果有重要事项,您将返回某项内容;或者在没有必要的情况下完全不返回任何内容。
因此,在我们的小演示功能的情况下,假设我们希望它返回一个值,则将这样编写...
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
return @y
end
对任何程序员来说,它确实会返回一个值将是非常清楚的,并且对于他们来说,在不意识到这一点的情况下很难破解它。
或者,可以这样写,而忽略return语句。
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
@y
end
但是,为什么不理会“回报”一词呢?为什么不把它放在那里并让它100%清楚发生了什么呢?它实际上不会对您的代码执行能力产生任何影响。