【问题标题】:Is there any reason to use the 'return' in the second line in the method ?是否有任何理由在方法的第二行中使用“return”?
【发布时间】:2012-08-02 06:10:29
【问题描述】:

我有这段代码,我们可以用两种方式编写

第一道

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

     // Do something ...
}

第二种方式

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

问题:

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

【问题讨论】:

标签: c# c++


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    Invert “if” statement to reduce nesting

    基本上,当“//做某事...”是很多代码时,这一点变得很重要。

    【讨论】:

      【解决方案3】:

      想象一下,有不止一种情况,看看这个:

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

      还有这个:

      if (!...)
        return;
      
      if (!...)
        return;
      
      if (!...)
        return;
      
      if (!...)
        return;
      
      if (!...)
       ...
      

      我认为,第二个更易读也更方便。
      如果有一个或两个条件,差异是微不足道的。

      【讨论】:

        【解决方案4】:

        是的,前面的答案中提到了一些优点。由于它是在 C++ 中标记的,因此在使用 First Way 时应注意释放分配的内存。

        例如,可能会有这样的错误代码

        void func(int val)
        {
             Foo *obj = new Foo();
             if(val == 0)
                  return;
        
             // Do something ...
            delete obj;        // Possible Memory leak
        }
        

        【讨论】:

        • 如果这是 C,那么您的 cmets 是正确的。在现代 C++ 中,代码从来不是这样写的(尽管 C 程序员经常这样写糟糕的 C++)。 RAW 指针封装在 RAII 对象中以防止出现这种情况。这就是为什么提前返回不仅是可能的,而且在 C++ 中很常见,但在 C 中却很少见。
        • @LokiAstari:完全同意你的看法
        • @Picarus:THE 最重要的 C++ 概念。一个快速的谷歌给我:en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization
        【解决方案5】:

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

        【讨论】:

          【解决方案6】:
          • 如果您想在定义的值上快速退出,那么 return before 应该会更好,
          • 但如果这种情况很少见,那么直接处理好的数据可能会更好。

          根据您使用的语言,对性能的影响应该更大或微不足道。

          如果它是为了清楚起见,那么在条件之后调用一些函数应该是好的。 有些部分管理不同的案例,有些部分处理它。

          应该以这种方式提高可维护性和可读性。

          【讨论】:

            【解决方案7】:

            如果您以第一种方式调用,那么它不会运行其余的东西。因为它直接返回。但是如果你使用第二种方式,里面的代码将会运行。

            【讨论】:

            • 可能你错过了两个案例中if的条件
            【解决方案8】:

            Void 方法并不总是需要 return 语句。但是您可以在关键位置使用“return”,以避免在遇到退出条件时执行不必要的语句。

            【讨论】:

            • 根据示例,不需要执行的语句
            • 我猜第一种方式指定了相同的场景,如果 val=0 ?
            猜你喜欢
            • 1970-01-01
            • 2013-12-10
            • 2011-04-20
            • 2013-07-28
            • 1970-01-01
            • 2021-10-05
            • 1970-01-01
            • 2010-12-31
            • 1970-01-01
            相关资源
            最近更新 更多