如果您有一个 return 或 throw 在 IF 语句中,是否可以不使用 ELSE 语句?

Is it ever okay to not use an ELSE statement if you have a return or throw inside the IF statement?

我经常写这样的代码

bool myFunct (...)
{
     if (something)
     {
          return false; 
     }         

     // .... more code ....

}

备选方案是

bool myFunct (...)
{
     if (something)
     {
          return false; 
     }         
     else
     {
          // .... more code ....
     }

}

当然,那个else块是不必要的,因为前面的return意味着第一个到达else语句就相当于在里面。还有一个事实是,为了让编译器满意,我经常不得不将第二个实现的结构更改为

bool myFunct (...)
{
     bool retval = true;
     if (something)
     {
          retval = false; 
     }         
     else
     {
          // .... more code ....
     }
     return retval;    
}

这是额外的代码,看起来很愚蠢。我的问题是,对于这种情况,管理当局和牧师怎么说?

当然可以。您基本上是在编写一个保护条件,以阻止您尝试执行不必要的逻辑。没关系。

与许多事情一样,这是个人喜好,但我更喜欢看到像您的第二个示例那样编写简单案例的代码,以及更复杂案例的第三个示例。不过,这并不意味着任何错误。

对于不会自然终止的 if 子句(例如,具有 returnthrow 语句),使用 else 子句在技术上没有任何问题,没用。

一些风格指南反对它(并且一些 IDE 和分析工具可能会产生警告来支持这些指南),但最终,它只是一种偏好。

第二个示例对我来说很好,因为如果第一条语句中的代码像下面这样更新,它将防止意外行为:

bool myFunct (...)
{
     if (something)
     {
          // ... stuff 
          if (something_else) return false; 
     }         
     else
     {
          // .... more code ....
     }

}

不仅可以,甚至Spartan Programming中受到鼓励。根据 Spartan Programming - 更短和更简单的代码更好,你可以通过快速终止和尽可能避免 else 语句

来实现它(以及其他方式)

在尽量减少使用控制的情况下:

(2) Simplifying conditionals with early return.

(4) Simplifying logic of iteration with early exits (via return, continue and break statements).

P.S。 It seems @Jeff Atwood also likes the spartan programming way