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

时间:2015-06-05 10:05:24

标签: algorithm logic

if(A) then if(B)

VS

if(A and B)

哪个更好用,为什么?

3 个答案:

答案 0 :(得分:5)

假设:

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

可能有人试图将其替换为:

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

但它们不等价(a = true,b = false显示它的反驳参数)

除此之外,如果语言允许像AND,OR这样的短路操作,则没有理由不链接它们。而且他们中的大多数都允许它。表达式是等效的,您可以使用链式表单来提高代码的可读性。

答案 1 :(得分:4)

这取决于您的具体情况,但通常是:

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

答案 2 :(得分:2)

您已对此算法'进行了标记。和'逻辑'从这个角度来看,我会说差别不大。

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

C,C ++和Java等编程语言保证在A && B表达式中首先评估A并且不评估false B。 如果B具有计算成本,那么这可能会产生很大的影响,如果A为假,则无效。

考虑以下C片段:

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

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

这个'技巧' (称为短路评估)很有用,因为它避免了编写稍微冗长的详细信息:

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

较早版本的VB(如VB6)因不发生短路而臭名昭着。

另一个是,如果B为真,则不会评估A || B中的A

关于支持的讨论:

Do all programming languages have boolean short-circuit evaluation?

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