18

我知道有时 usingreturn;可以在 Java 中发挥有用的作用,例如保护:

public void foo(Bar bar) {
    if(bar == null)
        return;

    // bar is not null, go ahead and do stuff with it
}

但是,如果只是到达返回类型的方法的末尾void呢?例如,

public void printMenu() {
    System.out.println("Print out some boilerplate info here, line 1.");
    System.out.println("Print out some boilerplate info here, line 2.");
    System.out.println("Print out some boilerplate info here, line 3.");

    return;
}

除了纯粹的风格偏好之外,是否有任何理由支持或反对包括在内return;?如果是这样,它们是什么?

编辑:嗯,很快就得到了回答。总结下面发布的 15 个答案:“不”。

4

11 回答 11

51

也许你是通过代码行支付的?

除此之外,真的没有理由最后放一个空的回报。

于 2009-12-15T19:29:48.247 回答
11

我自己避开他们。这只是一行无用的代码。事实上,PMD有一个规则可以检查这些无用的return语句。

于 2009-12-15T19:30:34.503 回答
6

我认为没有理由,即使从风格的角度来看,最终会有一个悬而未决的回报。毕竟,你知道它会返回,因为那里有一个末端支撑......

于 2009-12-15T19:30:57.277 回答
2

我说永远不要这样做。void函数中的return 语句只是为了打破语句的逻辑。如果您开始这样做,那么您会向代码的读者发送一个令人困惑的语句,人们会很容易认为您可能计划有一些您忘记的if语句。始终追求可读性。

于 2009-12-15T19:34:50.983 回答
1

纯粹基于样式的问题,绝对没有区别(也许是额外的 asm 指令,但谁在乎呢?)。做任何你觉得更舒服的事情,或者遵循之前在代码中建立的约定。

于 2009-12-15T19:30:25.843 回答
1

结构化编程的一个想法是:

每个例程都应该有一个入口点和一个出口点。

如果您订阅该策略,则该return语句指示退出例程的唯一方法。

在实践中,该政策并没有使代码更清晰,自 1970 年代以来,它几乎被忽略了。如果您在其他例程中允许多个返回语句,那么您应该在最有意义的地方允许零返回语句。

于 2009-12-15T19:53:55.767 回答
1

我认为不必要的陈述只是噪音,所以我不会在最后添加那个回报。话虽如此,如果某些东西不满足我的要求,我会在方法的开头添加返回,或者更好的是,我会抛出 IllegalArgumentException 异常。

于 2009-12-16T04:57:36.193 回答
0

在您的示例中,最后的“回报”是个人、团队或组织风格的问题。我个人更喜欢做一个明确的回报。

于 2009-12-15T19:29:59.477 回答
0

我觉得除了个人喜好,没有什么区别。第一个案例我认为是合法的。否则,您应该将语句打包在一个大的 if 语句中。

最后一个例子 return 是多余的。

于 2009-12-15T19:32:08.087 回答
0

我会从一致性的角度避免它。从不放它比记住总是添加它更容易。

于 2009-12-15T19:36:10.090 回答
0

它没有任何用途,但如果您想这样做(因为您团队中的每个人都这样做或出于任何原因),您可以这样做。

于 2009-12-15T19:39:55.717 回答