使用if()加上立即返回一个公认的做法?

Jam*_* P. 3 language-agnostic conditional

在下面的例子中使用一个if与一个直接相结合的return可接受的做法,而不是在if里面有一块代码{}?这些在实践中是等同的还是其中一种方法的缺点?

Java中的一个例子:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

ServletContext sc = this.getServletContext();       

// Throw exception for fatal error (Servlet not defined in web.xml ?)
if( sc == null )
 return; // old-style programming
 // Careful with silent bugs ! Correct way of handling this is:
 // throw new RuntimeException( "BookDetail: ServletContext is null" );

BookList bookList = WebUtil.getBookList( sc );
Run Code Online (Sandbox Code Playgroud)

Mic*_*ter 9

Martin Fowler倾向于早日回归,并将这个想法称为Guard Clause.

就个人而言,我不喜欢Java,因为我更喜欢每种方法返回一次.然而,这是主观的,我可能是少数.

我的博客上讲述这反对.

  • 单回报讨论http://stackoverflow.com/questions/36707/should-a-function-have-only-one-return-statement (2认同)

use*_*321 8

这不是回报,这是一个例外.代码完全没问题.

即使你用"返回东西"代替那个投掷,它仍然可以.

  • 这不是一种不好的做法,但如果这是一个例外情况,你应该抛出,就像你原来的代码一样.避免处理严重错误,如果该对象不应该为null,只是让程序崩溃,何时崩溃,调试. (2认同)

hom*_*ast 7

我认为这取决于可读性.代码应该以相同的方式运行.

我一直都在使用这样的东西

Function Blah() As Boolean
  If expr Then
     Return False
  End If
  Do Other work...

  Return result

End Function
Run Code Online (Sandbox Code Playgroud)