【问题标题】:What's the difference between if(A) then if(B) and if (A and B)?if(A) then if(B) 和 if (A and B) 有什么区别?
【发布时间】:2015-06-05 10:05:24
【问题描述】:

if(A) then if(B)

if(A and B)

哪个更好用,为什么?

【问题讨论】:

  • if (A and B) 看起来更清晰。对于小条件,这绝对是要走的路;如果你想在 A 而不是 B 的情况下做一些事情,那么你可能必须分成两个块。
  • if(A)-then-if(B) 更灵活,根据表达式长度可以选择取哪个;如果两者都太长,可以将部分拆分并存储在具有适当名称的变量中,然后逐步解决。
  • 如果我有n个条件怎么办,在那种情况下哪个更好?
  • @BayremBenAlaya:“更好”取决于比此处提供的更多信息。有时一个版本更清晰,有时另一个版本更清晰。通常对于更复杂的条件,需要进行一些重构以使意图更容易理解,将条件本身提取到方法中或反转某些条件以防止过度嵌套。有了这个人为的例子,几乎没有什么区别。
  • 请注意语义在具有副作用的语言中是不同的。取决于语言是否允许短路条件!

标签: algorithm logic


【解决方案1】:

给定:

if (a) {
  if (b) {
    /// E1
  }
  /// E2
} else {
  // E3
}

人们可能会想用以下方式替换它:

if (a && b) {
 /// E1
} else {
 // E3
}

但它们并不等价(a = true 和 b = false 显示了相反的论点)

除此之外,如果语言允许 AND、OR 等短路操作,则没有理由不将它们链接起来。他们中的大多数人都允许这样做。表达式是等价的,你可以使用链式形式来提高代码的可读性。

【讨论】:

  • 编码时最佳实践是什么:使用更多条件(if)或使用更多逻辑运算符(and)?
  • 通常情况下,代码可读性更胜一筹。如果我能找到两个 if 比链接更好的场景,我会更新我的答案以讲述整个故事。
【解决方案2】:

这取决于您的具体情况,但一般来说:

1) if (A and B) 看起来更好/更干净。很明显,如果AB 都适用,则将执行以下块。

2) if(A) then if(B) 更适合当你想在A 适用但B 不适用的情况下做某事。换句话说:

if (A):
    if (B):
        # something
    else:
        # something else

一般看起来比

if (A and B):
    # something
if (A and not B):
    # something else

【讨论】:

    【解决方案3】:

    你已经标记了这个“算法”和“逻辑”,从这个角度来看,我想说的差别不大。

    然而,在实用的编程语言中,可能存在或不存在效率问题(甚至是可执行性)。

    C、C++ 和 Java 等编程语言保证在表达式 A && B 中首先计算 A,如果为 false,则不计算 B。 如果B 计算成本很高,或者A 为假则无效。

    考虑以下C sn-p:

    int*x
    //....
    if(x!=NULL&&(*x)>10) {
    //...
    

    x==NULL 时评估(*x) 很可能会导致致命错误。

    这个“技巧”(称为短路评估)很有用,因为它避免了编写稍微冗长的代码:

    if(x!=NULL){
      if((*x)>10){
    

    VB6 等旧版本的 VB 因不短路而臭名昭著。

    另一个是A || B中的BA为真时不会被计算。

    关于支持的讨论:

    Do all programming languages have boolean short-circuit evaluation?

    在任何提供短路和优化编译器的语言中,您都可以假设代码效率不太可能有任何差异,并使用最易读的语言。 通常是if(A&&B)

    【讨论】:

      猜你喜欢
      • 2016-01-13
      • 1970-01-01
      • 2015-06-15
      • 2018-01-29
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      • 1970-01-01
      • 2012-07-03
      相关资源
      最近更新 更多