代码之家  ›  专栏  ›  技术社区  ›  steven

嵌套和层叠的区别是什么

  •  4
  • steven  · 技术社区  · 16 年前

    嵌套和层叠的区别是什么?

    3 回复  |  直到 10 年前
        1
  •  4
  •   Anthony Forloney    16 年前

    两者相当:

    if (condition1) block1 
    else if (condition2) block2
    
    
    if (condition1) block1 
    else
    {
       if (condition2) block2
    }
    

    我假设它们也编译到同一个程序集,所以应该没有区别。

        2
  •  2
  •   charlieb    16 年前

    我要看你怎么安排。嵌套if相当于向每个内部ifs添加and:

    if(A) {
        if(B) {
            statement1
        }
        else if(C) {
            statement2
        }
    }
    

    相当于:

    if(A and B) {
        statement1
    }
    else if(A and C) {
        statement2
    }
    

    我的建议是努力提高可读性并检查你的逻辑。你可能会发现 DeMorgan's Laws 有助于重新安排逻辑。

    有一个总是让我恼火:

    if(A and B) {
        statement1
        statement2
    }
    else if(A and C) {
        statement1
        statement3
    }
    else if(not A) {
        statement4
    }
    

    VS

    if(A) {
        statement1
        if(B) {
            statement2
        }
        else if(C) {
            statement3
        }
    }
    else if(not A) {
        statement4
    }
    

    我只是不确定哪个更可读。它们在逻辑上是等价的。第一种更为表格化,在视觉上更容易,但重复语句1;第二种更为嵌套,更为难看(在我看来),但不重复语句。最终这是一个判断调用,因为它对编译器没有影响。

        3
  •  1
  •   Boris Pavlović    16 年前

    嵌套的 if-then-else 控制结构是复杂逻辑规则的最小化转换。它们很好地避免了检查条件中的冗余。它们的主要缺点是,从长远来看,这些结构可能会增长,使封闭方法过于庞大和复杂。打破嵌套的第一步 如果那时 块是标准化的。例如:

    if (A) {
      if (B || C) {
        block 1;
      } else {
        if (!D) {
          block 2;
        }
      }
    } else {
      block 3;
    }
    

    可以标准化为级联 如果那时

    if (A && (B || C) {
      block 1;
      return;
    }
    if (A && !B && !C && !D) {
      block 2;
      return;
    }
    if (!A) {
      block 3;
    }
    

    我们已经淘汰了 else 并使进一步提取方法重构变得容易。三都 如果 可以提取块以分离以其主体执行的业务逻辑命名的方法。

    推荐文章