首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Ruby中显式返回是一种好的风格吗?

在Ruby中显式返回是一种好的风格吗?
EN

Stack Overflow用户
提问于 2009-06-21 03:38:12
回答 6查看 80.1K关注 0票数 164

我来自Python背景,当涉及到风格时,总是有一种“正确的方式”(一种"Pythonic“方式),我想知道Ruby是否也存在同样的情况。我一直在使用我自己的风格指南,但我正在考虑发布我的源代码,我希望它遵守任何可能存在的不成文规则。

在方法中显式键入return是“Ruby方式”吗?我看过使用和不使用的情况,但是有正确的方法吗?有没有合适的时机来做这件事?例如:

代码语言:javascript
复制
def some_func(arg1, arg2, etc)
  # Do some stuff...
  return value # <-- Is the 'return' needed here?
end
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-11-30 05:28:00

老问题(和“回答”),但我将抛出我的两分钱作为答案。

你不需要这样做,但在某些情况下,它可以让你的代码更清晰。

尽管不使用显式返回可能是“Ruby方式”,但对于使用不熟悉的代码或不熟悉Ruby的这一特性的程序员来说,这是令人困惑的。

这是一个有点做作的例子,但想象一下有一个小函数,像这样,它将传递的数字加1,并将其赋给一个实例变量。

代码语言:javascript
复制
def plus_one_to_y(x)
    @y = x + 1
end

这是一个返回值的函数吗?很难说开发人员是什么意思,因为它既分配了实例变量,又返回了分配的值。

假设很久以后,另一位程序员(可能不太熟悉Ruby如何根据执行的最后一行代码进行返回)出现了,他想要输入一些打印语句来记录日志,然后函数变成这样……

代码语言:javascript
复制
def plus_one_to_y(x)
    @y = x + 1
    puts "In plus_one_to_y"
end

现在,如果有任何东西需要返回值,函数就会中断。如果没有任何东西需要返回值,那也没问题。显然,如果在代码链的更远的某个位置,某个调用它的东西期望返回一个值,那么它就会失败,因为它得不到它所期望的东西。

现在真正的问题是:是否真的需要返回值?这有没有破坏什么?它会在未来打破一些东西吗?谁知道呢!只有对所有调用进行完整的代码审查才能让您知道。

因此,至少对我来说,最好的实践方法是要么非常明确地表明,如果重要的话就返回它,或者当它不重要的时候什么都不返回。

因此,在我们的小演示函数的情况下,假设我们想让它返回一个值,它将写成这样……

代码语言:javascript
复制
def plus_one_to_y(x)
    @y = x + 1
    puts "In plus_one_to_y"
    return @y
end

对于任何程序员来说,它都很清楚它确实返回了一个值,而且他们很难在没有意识到的情况下破坏它。

或者,可以像这样编写,省略返回语句...

代码语言:javascript
复制
def plus_one_to_y(x)
    @y = x + 1
    puts "In plus_one_to_y"
    @y
end

但是为什么要省略return这个词呢?为什么不把它放进去,让它100%清楚地知道发生了什么?它不会对你的代码的执行能力产生任何影响。

票数 237
EN

Stack Overflow用户

发布于 2009-06-21 03:41:26

不是的。好的Ruby风格通常只使用显式的返回值作为早期返回值。Ruby热衷于代码极简主义/隐含魔术。

也就是说,如果一个显式的返回值可以让事情变得更清楚,或者更容易阅读,那么它不会伤害任何东西。

票数 68
EN

Stack Overflow用户

发布于 2009-06-21 08:29:18

我个人使用return关键字来区分我所说的函数式方法,即主要为了返回值而执行的方法和主要为了副作用而执行的过程性方法。因此,对于返回值很重要的方法,需要额外的return关键字来引起对返回值的注意。

我在调用方法时使用了同样的区别:函数方法得到圆括号,而过程方法没有。

最后但并非最不重要的一点是,我也将这种区别用于块:功能块使用花括号,过程块(即“做”某些事情的块)使用do/end

但是,我尽量不对它信以为真:对于块,大括号和do/end具有不同的优先级,我只是切换到另一种样式,而不是添加显式的圆括号来消除表达式的歧义。同样的道理也适用于方法调用:如果在参数列表周围添加括号可以提高代码的可读性,那么我会这样做,即使所讨论的方法本质上是过程性的。

票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1023146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档