什么时候在Groovy中编写显式的return语句?


21

目前,我正在研究Groovy / Grails项目(这是我的新手),我想知道return在Groovy方法中省略关键字是否是一种好习惯。据我所知,您必须显式插入关键字(即用于保护子句),那么在其他地方也应该使用该关键字吗?在我看来,附加return关键字可提高可读性。还是只需要习惯一下?您对该主题有何经验?

一些例子:

def foo(boolean bar) {
    // Not consistent
    if (bar) {
        return positiveBar()
    }
    negativeBar()
}

def foo2() {
    // Special Grails example
    def entitiy = new Entity(foo: 'Foo', bar: 'Bar')
    entity.save flush: true
    // Looks strange to me this way
    entity
}

Perl中也存在类似的问题:如果没有return语句,函数将返回最后一个求值表达式。就个人而言,我总是使用显式return,但我不了解Groovy。
基思·汤普森

2
就我个人而言,return 只有在完全清楚时才使用隐式。toString是一个典型的例子:它是单线的,计算出的值显然是返回值。但是话又说回来,我还没有编写足够的Groovy程序来知道这是否适合更大的社区的想法。
Joachim Sauer 2012年

Answers:


7

我肯定会添加返回值,因为它使以后可能会来更新和维护代码的任何人(包括您自己)更加清楚意图。

否则,它可能看起来像是键入错误。

另一件事是要记住将要返回空值的函数/闭包声明为“ void”-再次使将来的维护者可以清楚地知道您要做什么。


17

清晰为王。

做对其他程序员最清楚的事情,该程序员在编写代码后必须阅读您的代码。


8

这是一个省略return语句的参数(Source):

Groovy中的低调功能

背景

我已经与Groovy合作了一段时间,但对一个功能不满意:最后一个求值表达式的隐式返回。例如:

def getFoo() {
  def foo = null
  if (something) {
    foo = new Foo()
  }
  foo // no 'return' necessary
}

在上面的代码中,我将使用return,因为它对我来说更安全。我倾向于同意埃里克(Eric)的帖子(关于明确的回报)。

启示

我现在明白了,这全归功于Groovy中增强的收集方法。

考虑收集方法。它通过应用函数来转换列表。用伪代码:

[ a, b, c, d] => [ f(a), f(b), f(c), f(d) ]

考虑到这一点,这是另一个示例:

class Composer {
  def name
  // def era, etc
}

def list = [ 'Bach', 'Beethoven', 'Brahms' ]

// the closure returns the new Composer object, as it is the last
// expression evaluated.

def composers = list.collect { item -> new Composer(name : item) }

assert 'Bach' == composers[0].name

这个想法只是从字符串列表构建Composer对象列表。如评论中所述,传递给collect的闭包使用隐式返回效果很大。一次,我会花3-4行来表达这个想法。

但是现在,此代码不仅简单明了:它确实很优雅。非常让人联想到其他语言,例如Python。

带回家的消息

有许多出色的Groovy功能列表。但是,我们很少看到列出“隐性回报”。我是风扇:它为其他功能润滑了车轮。

我意识到它有多种语言可用:我只是没有在Groovy中使用它。我怀疑再过几个星期我将无法生存。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.