Groovy的“可选返回”语义

时间:2012-10-17 01:06:54

标签: groovy return

在Groovy中,return statement is optional允许您编写如下方法:

def add(a, b) {
    a + b
}

...添加ab并将结果返回给调用者。

但是,我想知道当方法有多个返回“语句”时语义是什么。例如,在Java中,您可能有:

String append(String a, String b) {
    if (a == null) {
        return b;
    }
    return a + b;
}

这可以(假设)被翻译成Groovy,如:

def append(a, b) {
    if (! a) {
        b
    }
    a + b
}

但是,在这种情况下,Groovy如何知道应该返回b语句中的if?或者不是吗?我假设Groovy不能简单地处理任何结果未被用作return的语句,对吗?在这种情况下,“可选返回”功能的行为是否有明确定义的语义?

1 个答案:

答案 0 :(得分:26)

您链接的页面(相当简洁)描述了确切的语义:

  

请注意,return语句在方法结束时是可选的。

因此除非您明确返回,否则永远不会返回b块中的if。实际上,这意味着返回值将是评估的最后一个语句的结果,因此如果您的示例是

def append(a, b) {
   if (!a) { b }
   else { a + b }
}

如果b!a,则结果为true,否则为a + b

调用void函数的结果是null,所以如果示例是

def append(a,b) {
   if (!a) { b }
   else { a + b }
   println "debug: $a $b"
}

然后append将始终返回null

我自己的经验法则是,如果方法或闭包包含多个语句,则始终使用显式返回语句。我认为在更复杂的方法中依赖隐式返回语句是危险的,因为如果有人在方法的末尾添加一行,他们将改变返回值,即使他们很可能不打算这样做。