首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >if- styles样式和优化

if- styles样式和优化
EN

Stack Overflow用户
提问于 2016-05-27 23:02:49
回答 3查看 578关注 0票数 2

当一个函数的行为取决于一系列条件时,可以使用不同的if-返回块或一系列if-else块来计算它。示例计算模式:

代码语言:javascript
复制
void f(params) // isolated if-blocks
{
    if (cond1) {
       // computational steps
       return;
    }

    if (cond2) {
       // computational steps
       return;
    }

    // computational steps of last case
 }

 void f() // unique if-else block
 {
    if (cond1) {
       // computation
    } else if (cond2) {
       // computation
    } else { // last condition
       // computation
    }
 }

我会说,第一个总是更易读的,但我不知道从设计(维护/错误倾向)或性能(分支预测/编译器优化)的角度来看,第二个是最好的。

这两种方法的优缺点是什么?还有什么事情我没有考虑过?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-05-27 23:08:06

如果“计算步骤”适当地长(有时这并不需要很长的时间),那么很难从视觉上感觉到有三个独立的块,每个块都有一个早期的返回。有人可能会错误地推断所有三个块都可以在同一个函数调用中运行。

第二版明确表示只能执行一条路径,我认为阅读和维护要清楚得多。

票数 6
EN

Stack Overflow用户

发布于 2016-05-27 23:17:16

已经观察到,复杂的逻辑可能会被绊倒时,如果-然后- using是使用与直接使用许多if-然后。但前面的帖子是正确的,这不重要,只要所有的标准是唯一的,为每个其他人,如果或其他声明。

但是,当有许多参数和众多逻辑集在一个语句(AndAlso、OrElse、括号等)中混合在一起时,可能会出现一些特殊情况,而您不可能使用其他方法来枚举所有这些参数--例如,您可能只想使用20个可能的参数组合中的两个场景。在这里,您只需要使用2个if-然后语句就可以了。

票数 1
EN

Stack Overflow用户

发布于 2016-05-28 00:17:07

如果将计算步骤放入它们自己的函数中,则您的函数如下所示:

代码语言:javascript
复制
void f(params) // isolated if-blocks
{
   if (cond1) {
      function_cond1();
      return;
   }

   if (cond2) {
      function_cond2();
      return;
   }

   // computational steps of last case
   function_default();
}
代码语言:javascript
复制
void f() // unique if-else block
{
   if (cond1) {
      function_cond1();
   } else if (cond2) {
      function_cond2();
   } else { // last condition
      function_default();
   }
}

当你这样做的时候,这两种风格的不同并不会造成很大的不同。这两种方法都很容易遵循。

就我个人而言,我更喜欢第一种风格,因为它允许三个块/条件清楚地分开,但我认为第二种方法一点也不坏。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37493460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档