如果你有一个返回或扔在IF语句中,是否可以不使用ELSE语句?

时间:2015-02-20 13:32:21

标签: algorithm coding-style logic control-structure

我经常编写如下代码

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;    
}

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

4 个答案:

答案 0 :(得分:2)

当然。你基本上写了一个保护条件,会阻止你尝试执行不必要的逻辑。没关系。

与许多事情一样,这是个人喜好,但我更喜欢看到代码写的像你的第二个例子的简单案例,以及第三个例子,用于更复杂的案例。但这并不代表任何错误。

答案 1 :(得分:2)

不仅可以,Spartan Programming 甚至鼓励。根据Spartan编程 - 更短更简单的代码更好,并且您通过快速终止(以及其他方式)实现快速终止并尽可能避免else语句

尽量减少使用控制权:

  

(2)简化早期return的条件。

     

(4)简化早期退出的迭代逻辑(通过   returncontinuebreak语句。

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

答案 2 :(得分:0)

对于else子句的if子句没有自然终止(例如,有returnthrow语句,在技术上没有任何错误),它只是没用。

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

答案 3 :(得分:0)

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

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

}