3

我经常写如下代码

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

4 回答 4

2

不仅没问题,甚至在Spartan Programming中也鼓励这样做。根据 Spartan Programming - 更短更简单的代码更好,您可以通过快速终止和 else尽可能避免语句来实现它(以及其他方式)

在最小化使用控制下:

(2) 用 early 简化条件return

(4) 使用提前退出(通过 和 语句)简化迭代 return逻辑。continuebreak

PS看来@Jeff Atwood 也喜欢斯巴达式的编程方式

于 2015-02-20T13:55:58.190 回答
2

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

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

于 2015-02-20T13:34:20.260 回答
0

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

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

}
于 2015-02-20T13:39:04.393 回答
0

elseif不自然终止的子句(例如,有returnor语句)设置子句在技术上没有任何问题throw,它只是没用。

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

于 2015-02-20T13:38:36.797 回答