在Groovy中,return statement is optional允许您编写如下方法:
def add(a, b) {
a + b
}
...添加a
和b
并将结果返回给调用者。
但是,我想知道当方法有多个返回“语句”时语义是什么。例如,在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
的语句,对吗?在这种情况下,“可选返回”功能的行为是否有明确定义的语义?
答案 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
。
我自己的经验法则是,如果方法或闭包包含多个语句,则始终使用显式返回语句。我认为在更复杂的方法中依赖隐式返回语句是危险的,因为如果有人在方法的末尾添加一行,他们将改变返回值,即使他们很可能不打算这样做。