javascript - 适当使用嵌套 If 语句

标签 javascript standards simplify nested-if

<分区>

显然,嵌套的 if 语句是允许的。所以看起来它们可能有适当的用途。每个人都讨厌它们,我想知道是否有时嵌套 if 语句是最好的做法。以下是我认为最好使用嵌套语句的示例:

if (A){
    //Code for A
    if (B){
        //Code for B
    } else {
        //Code for !B
    }
    //More A Code
} else {
    //Code for !A
    if (C){
        //Code for C
    } else {
        //Code for !C
        if (D){
            //code for D
        }
    }
}

如果我尝试不嵌套这段代码,结果会是这样:

if (A&&B){
    //Code for A
    //Code for B
    //More A Code
}
if (A&&!B){
    //Code for A
    //Code for !B
    //More A Code
}
if (!A&&C){
    //Code for !A
    //Code for C
}
if (!A&&!C&&D){
    //Code for !A
    //Code for !C
    //Code for D
}
if (!A&&!C&&!D){
    //Code for !A
    //Code for !C
}

一开始这看起来更干净,直到您实际将代码放在那里并且出现冗余,这是一场噩梦。

if (A){
    //Code for A
}
if (A&&B){
    //Code for B
}
if (A&&!B){
    //Code for !B
}
if (A){
    //More A Code
}
if(!A){
    //Code for !A
}
if(!A&&C){
    //Code for C
}
if(!A&&!C){
    //Code for !C
}
if(!A&&!C&&D){
    //Code for D
}

这种方式不使用嵌套语句,也不需要重写代码,但它过度使用了条件,并且 if() 实例比原来的多。此外,你必须做更多的阅读而不是略读才能看到 B 仅在 A 为真时才被评估。然后,如果你在底部或其他地方放置一个 if(A&&C) ,它就会变得更难维护。

嵌套 if 语句对我来说似乎是最合理的,因为它们具有最少的 if() 实例。我不明白为什么每个人都讨厌嵌套的 if 语句。有没有人有更实用的方法来编写这段代码?还是我误解了人们对嵌套 if 的意思?貌似每题嵌套if都没有第一层的代码,比如:

if(A){
    if(B){
        //Do Something
    } else {
        //Do Something Else
    }
} else {
    //Do Third thing
}

等等...不,那个人仍然会使用更多的 if() 实例来尝试缩短它。 particular example我在想有两个相同的陈述。任何人,这些示例是适当的嵌套 if 语句,还是有更好/更清晰/更清洁/更快/更标准的编写此代码的方式?

最佳答案

嵌套的 if 语句在不必要的情况下是讨厌的。通常有办法将它们变成更少的 complex代码,有时不明显但仍然可能。但是,如果您的问题是 essentially complex , 然后嵌套 if 语句完全可以对其进行编码。

关于javascript - 适当使用嵌套 If 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37803343/

相关文章:

javascript - VUE 安装 - 无法解析依赖关系树

http - 为什么 HTTP 错误代码从 100 开始

expression - 你能简化这个表达式吗?

c++ - 可以将 4 位数字成对求和的算法,以便它们的和差尽可能接近

java - 我怎样才能实现一个通过传递一个整数来返回一个字符串的方法,而不需要很多 if 语句?

javascript - 从热图中隐藏列

javascript - Emscripten 可以将 LLVM 编译为基于 Web 的程序语言的 JavaScript

JavaScript 继承与工作代码助手和大纲?

c++ - 我可以在任何地方阅读 C++ 2011 FDIS 吗?

postgresql - Postgres 9.0 + 翻译函数和ascii码