2009-12-15 142 views
17

我知道有使用return;时可以起到在Java中,一个有用的目的倍,如防护:返回类型为void的方法是否使用return语句?

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个答案:“No.”

+0

如果调用函数或方法不需要它,为什么要返回它?将其留给未来的开发人员不会让人混淆。 – 2009-12-15 19:32:27

回答

47

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

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

+1

在if区块内怎么样?也许我有一个递归函数,我想我的退出条件在我的函数的顶部? – Zoidberg 2009-12-15 19:32:58

+5

那现在不会是“到底”了吗? :-)使用'return;'作为'void'函数是完全可以接受的,作为避免1000个嵌套ifs的方法--OP已经在他的第一个例子中证明了这一点。问题是关于在完全没有意义的右括号之前使用'return'。 – ChssPly76 2009-12-15 19:39:37

+2

接受为比其他同样正确的答案更有趣。 – Pops 2009-12-15 19:47:30

0

在你的例子中,最后的'返回'是个人,团队或组织风格的问题。我个人更喜欢做一个明确的回报。

1

纯粹基于样式的问题,绝对没有区别(也许是额外的asm指令,但是谁在乎?)。根据代码中以前建立的惯例做你喜欢的任何一个。

+4

如果我记得正确的话,那里会有一个隐式返回指令,无论它是否被输入。 – 2009-12-15 19:38:24

10

我避开他们,我自己。这只是一个无用的代码行。实际上,PMD有一条规则,用于检查这种无用的return语句。

4

即使从风格的角度来看,我没有理由在最后得到一个悬而未决的回报。毕竟,你知道它会回来,因为有一个结束大括号...

0

我认为除了个人喜好,没有任何区别。第一种情况我认为它是legitemate。否则,你应该把这些陈述包装在一个大的if语句中。

最后一个返回示例是多余的。

1

我说永远不要这样做。返回语句void函数只是为了突破语句的逻辑。如果你开始这样做,那么你发送一个令人困惑的声明给你的代码的读者,人们会想,也许你计划有一些如果陈述,你忘了。总是为了可读性。

0

我会避免它只是从一致点。永远不会忘记永远添加它。

0

它不起任何作用,但如果你想这样做(因为你的团队中的每个人都这样做,或者出于任何原因),你可以做到这一点。的structured programming

1

一个想法是:

每个例程应该有且仅有一个入口点和只有一个出口点。

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

实际上,这个政策并没有使代码更加清晰,并且自1970年代以来它一直被忽视。如果你在其他例程中允许多个返回语句,那么你应该在最有意义的地方允许零返回语句。

1

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

相关问题