首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >if语句与嵌套if语句的系列?

if语句与嵌套if语句的系列?
EN

Stack Overflow用户
提问于 2016-01-12 22:41:31
回答 3查看 845关注 0票数 0

只是想知道一系列的if语句之间是否有什么区别,这些语句是彼此分开的,还是一组嵌套的if语句,每条语句都是从前面的语句缩进的呢?同样的跌势适用吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-12 23:00:17

if语句有几种样式。1.“布希”:

代码语言:javascript
运行
复制
if(cond1)
     {
     if(cond2)
          {
          if(cond3)
               action123;
          else action123b;
          }
     else {
          if(cond3b)
               action12b3;
          else action12b3b;
          }
     }
else {
     /* ... */
     }

2: Long if/else链:

代码语言:javascript
运行
复制
if(cond1)
    {
    action 1;
    }
else if(cond2)
    {
    action 2;
    }
else if(cond3)
    {
    action 3;
    }
else if(cond4)
    /* ... */

带有“刚性”缩进的Long if/else链:

代码语言:javascript
运行
复制
if(cond1)
     {
     action 1;
     }
else {
     if(cond2)
          {
          action 2;
          }
     else {
          if(cond3)
               {
               action 3;
               }
          else {
               /* ... */

在我看来,关于好的编程风格的普遍共识是,像#1这样的“灌木丛”树很差--它们很难理解。(如果他们有2层深,3岁时很难理解,4岁时根本不可能理解的话,那就很难理解了。)

普遍的共识是,如#2所示的长if/else链要容易得多,更容易理解。这是一个很明显的成语,值得我用第二种方式来表达,而不是第三种更“合乎逻辑”的表达方式。

茂密的树木很难理解,有时我会把它们转换成链式if/else形式:

代码语言:javascript
运行
复制
if(cond1 && cond2)
     {
     /* action if both true */
     }
else if(cond1 && !cond2)
     {
     /* action if only cond1 true */
     }
else if(!cond1 && cond2)
     {
     /* action if only cond2 true */
     }
else {
     /* action if neither true */
     }

这“效率较低”,因为cond1cond2可能会被多次评估,但在这样做时,它会将CPU周期(这是很便宜的)与程序员的时间(这是昂贵的)和bug(可能会更昂贵)进行权衡。

票数 2
EN

Stack Overflow用户

发布于 2016-01-12 22:49:09

关键是确保你得到你想要的结果。如果您正在测试的所有内容在逻辑上都是独立的,那么您可以将所有If语句放在一行中。然而,通常情况下,所测试的条件是相互关联的;然后,使用嵌套的if语句来表示该逻辑通常更简单。

很值得创建测试用例,通过逻辑来执行所有可能的路径,以确保条件代码在所有情况下都能给出您想要的结果。

您最重要的考虑是正确地执行您的代码功能--紧跟在后面的是那些需要维护代码的人很容易理解您的代码。只有在实现了这些目标之后,才会考虑性能问题,前提是度量能够证明这段代码消耗了大量时间。

票数 2
EN

Stack Overflow用户

发布于 2016-01-12 22:52:40

这完全取决于你的具体情况。在没有看到任何例子的情况下,帮助你是非常困难的。

通常,串联有多个if条件会增加执行时间,并被认为是微不足道的逻辑。

如果您可以重新组织您的逻辑,以便使用嵌套的if条件,或者更好地选择其他控制逻辑,如switchfor,则会更好。

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

https://stackoverflow.com/questions/34755153

复制
相关文章

相似问题

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