3

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

第一种方式

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

     // Do something ...
}

第二种方式

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

问题:

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

4

8 回答 8

10

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

于 2012-08-02T06:13:26.130 回答
5

请参阅反转“if”语句以减少嵌套

基本上,当'// Do something ...'是很多代码时,这变得很重要。

于 2012-08-02T06:16:51.460 回答
5

想象一下,有不止一个条件,看看这个:

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

和这个:

if (!...)
  return;

if (!...)
  return;

if (!...)
  return;

if (!...)
  return;

if (!...)
 ...

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

于 2012-08-02T06:24:43.847 回答
3

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

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

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

     // Do something ...
    delete obj;        // Possible Memory leak
}
于 2012-08-02T06:21:15.063 回答
1

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

于 2012-08-02T06:12:24.443 回答
1
  • 如果您想在定义的值上快速退出,那么 return before 应该会更好,
  • 但如果这种情况很少见,那么直接处理好的数据可能会更好。

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

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

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

于 2012-08-02T06:18:46.990 回答
0

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

于 2012-08-02T06:14:03.197 回答
0

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

于 2012-08-02T06:14:28.390 回答