如何更好地组织这两个连续的 IF 语句?

Posted

技术标签:

【中文标题】如何更好地组织这两个连续的 IF 语句?【英文标题】:How can I organize better these two consecutive IF statements? 【发布时间】:2011-10-15 23:50:49 【问题描述】:

我想更好地组织以下两个if 语句:

if(A || B)
    do stuff...


if(A && ! B)
    do other stuff...

有没有更好的办法?

编辑! 在第二个语句之前B,对不起...

【问题讨论】:

当 A&&B 也为真时,A||B 将评估为真。这是你想要的行为吗? 不幸的是我忘记了!第二个 IF 语句的 B 之前的运算符。我现在已经编辑了问题。 【参考方案1】:
if( A || B ) 
    do some stuff;
    if( !B ) 
        do other stuff;
    

但好处取决于使用情况,这个版本可能更难理解。

【讨论】:

终于有人明白了,以为我看不到优势:) +1 @Ziyao,是的,我也是,刚刚回答了这个问题:D 现在的优势是代码的性能更好,因为我避免了对 A 的评估。不仅简化了代码,避免了第二次输入任意复杂的 A 表达式。缺点是我获得了额外的嵌套级别。 @francesco,性能优势为零,因为优化器无论如何都会采取不同的方式,当代码变得更难理解时,第二次输入 A 不是问题。可读性应该是最重要的问题,真的。【参考方案2】:

对于第二个条件是 A && B 的原始问题,我的答案是:

如果没有别的,您可以将第二个块嵌套在第一个块中,以防止在第一个条件失败时进行不必要的评估。否则,我看不出有什么好的方法来缩短它......并且嵌套假定第一个块中的代码不会更新 A 和 B,它可能会。

对于新问题,我的答案是在第一个检查 !B 的块中嵌入一个块,并省略第二个块。这相当于为新问题提供的另一个答案。

【讨论】:

我的答案不再相关,因为 OP 改变了问题。 那不如编辑或删除,而不是添加评论。

以上是关于如何更好地组织这两个连续的 IF 语句?的主要内容,如果未能解决你的问题,请参考以下文章

两个if语句可以平行使用吗

如何在摇摆中的假if语句后连续闪烁表格单元格

if语句中可以没有case

我可以使用带有两个变量的case / switch语句吗?

有效地找到最小值和最大值

你如何加入两个计算的sql语句?