如何优化嵌套if?

Posted

技术标签:

【中文标题】如何优化嵌套if?【英文标题】:How to optimize nested if? 【发布时间】:2016-04-10 11:56:23 【问题描述】:

您好,我想知道有没有更好的方法来做到这一点? condition_a 比 b 更重要,b 比 c 更重要,等等。

var slot = condition_a

if (!slot) 
  slot = condition_b
  if (!slot) 
    slot = condition_c
    if (!slot) 
      slot = condition_d
      if (!slot) 
        slot = condition_e
      
    
  


if (slot) 
  //do something

【问题讨论】:

没有更好的方法了。无论你做什么都是正确的方式。 不,我 25 岁。只是学习一个爱好。 @JaydipJadhav - 有 3 个答案更简洁,而且,如果您了解 javascript,即使是中级编码人员也更易读 ***.com/questions/2922948/… 可能重复?关于该问题的链接文章对条件性能进行了相当好的(但可能已过时)细分。 【参考方案1】:

你做一个OR:

if (condition_a || condition_b || condition_c || condition_d || condition_e) 
      // do something

这相当于您的代码。如果条件评估为true,则不检查以下条件(称为short circuit evaluation)。它可以进行这样的检查:

if (a===null || a.b===0) 

请注意,在同一个地方有这么多条件看起来像是代码异味:可能有些东西在语义上设计得不够充分。

【讨论】:

不知道为什么这会被否决,这似乎是一个完全有效的答案。 我没有投反对票,但我认为他想要if (!condition_a || !condition_b || ... !condition_e) @JaromandaX 再次阅读 OP,他正在检查 slot 而不是 slot 本身的否定。 @gurvinder372 - 复习你的逻辑 @gurvinder372 他正在检查槽的负数只是为了看看是否需要检查另一个条件【参考方案2】:

您也可以像这样使用|| 条件,

slot = condition_a||condition_b||condition_c||condition_d;

例如Fiddle

【讨论】:

【参考方案3】:

如果您需要 slot 有一个值(而不仅仅是使用它来测试最后的条件)

var slot = condition_a || condition_b || condition_c || condition_d || condition_e;
if (slot) 
  // do soemthing

【讨论】:

你没有看到之前相同的答案吗? @DenysSéguret - 不,请告诉我之前的相同答案,您就有机会赢得大奖 @Jaromanda X 是的,谢谢,我就是这样做的。 var slot = (a || b || c); if(slot) slot.dosomething() ;

以上是关于如何优化嵌套if?的主要内容,如果未能解决你的问题,请参考以下文章

java多层if嵌套怎么优化

一万个if..........else....语句,请问如何去优化它。。。。以提升性能效率

Java嵌套if else优化

如何使用 JOINS 和嵌套 SELECT 优化此 SQL 查询?

Java 感觉在try语句中嵌套if语句不怎么美观,请问怎么优化

JavaSE选择结构——优化if-else的嵌套代码