if(A) then if(B) 和 if (A and B) 之间有什么区别?

What's the difference between if(A) then if(B) and if (A and B)?

if(A) then if(B)

if(A and B)

哪个更好用,为什么?

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

1) if (A and B) 看起来 better/cleaner。很明显,如果 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

鉴于:

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

人们可能会想将其替换为:

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

但它们不等价(a = true 和 b = false 显示反驳)

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

您已标记此 'algorithm' 和 'logic',从这个角度来看,我认为差别不大。

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

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

考虑以下 C 代码段:

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

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

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

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

VB 的旧版本,例如 VB6,因没有短路而臭名昭著。

另一个是如果A为真,A || B中的B将不会被计算。

关于支持的讨论:

Do all programming languages have boolean short-circuit evaluation?

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