2012-08-02 57 views
3

我有这样的代码,我们可以从两个方面是否有任何理由在方法的第二行中使用'return'?

第一种方式

void func(int val) 
{ 
    if(val == 0) 
      return; 

    // Do something ... 
} 

第二种方式

void func(int val) 
{ 
    if(val != 0) 
    { 
      // Do something ... 
    }   
} 

问题:

没有任何理由使用第一种方式? 是否有任何优势使用第一种方式(在C++或C#中)

+0

请在本网站搜索“早退”,这已经讨论过数百次。 – Mat 2012-08-02 06:12:55

+0

使用你喜欢/或能够更好地阅读的那个! !你也可以有一个很好的[看这里](http://programmers.stackexchange.com/questions/18454/should-i-return-from-a-function-early-or-use-an-if-statement) – V4Vendetta 2012-08-02 06:13:40

+0

第一个过程避免了反头箭头模式:http://lostechies.com/chrismissal/2009/05/27/anti-patterns-and-worst-practices-the-arrowhead-anti-pattern/ – parsh 2012-08-02 06:16:36

回答

10

使用第一种方法的主要原因是减少源文件中的嵌套。

1

没有区别 - 是否使用其中一个或另一个完全取决于您对某个或另一个的主观偏好,受可读性,可理解性等

0

如果你打电话作为第一种方式,那么它不运行其余的东西。因为它直接返回。但是如果你使用第二种方式运行代码。

+0

你错过了这两种情况下显示的'if'的情况 – V4Vendetta 2012-08-02 06:27:52

0

无效方法总是不需要返回语句。但是您可以在战略位置使用“返回”来避免在遇到退出条件时执行不必要的语句。

+0

根据样本没有不必要的语句来执行 – V4Vendetta 2012-08-02 06:27:11

+0

我猜如果val = 0,第一种方式指定了相同的情况? – Muse 2012-08-02 06:31:50

1
    如果要退出快上定义的值,所以返回之前应该会更好
  • ,但如果这种情况是罕见的,所以可能最好还是直接在良好的数据。

取决于您使用的是哪种语言,对性能的影响应该更大或者不显着。

如果它的目的是为了清晰起见,所以在条件应该很好之后调用一些函数。有些部件管理不同的情况,有些部件处理它。

可维护性和可读性应该通过这种方式来改进。

3

是的,在先前的答案中提到了一些优点。由于使用C++进行标记,因此在使用First Way时应小心,以释放分配的内存。

对于如存在可不好这样的代码

void func(int val) 
{ 
    Foo *obj = new Foo(); 
    if(val == 0) 
      return; 

    // Do something ... 
    delete obj;  // Possible Memory leak 
} 
+0

如果这是C你的意见是正确的。在现代的C++代码中绝不会像这样写(尽管C程序员经常写这样的C++)。 RAW指针被封装在RAII对象中以防止这种确切的情况。这就是为什么早期回报不仅可能,而且在C++中很常见,但在C中很少见。 – 2012-08-02 11:28:24

+0

@LokiAstari:完全同意你 – Jeeva 2012-08-02 11:32:57

+0

@Loki Astari,什么是RAII? – Picarus 2012-08-03 18:53:21

5

想象一下,有一个以上的条件,看看这个:

if (...) 
{ 
    if (...) 
    { 
    if (...) 
    { 
     if (...) 
     { 
      if (...) 
      { 
      ... 
      } 
     } 
    } 
    } 
} 

这:

if (!...) 
    return; 

if (!...) 
    return; 

if (!...) 
    return; 

if (!...) 
    return; 

if (!...) 
... 

我觉得,第二个更方便阅读。
如果有一个或两个条件,差异是微不足道的。

相关问题