【问题标题】:Appropriate Use of Nested If Statement [closed]适当使用嵌套 If 语句 [关闭]
【发布时间】:2016-06-14 05:05:45
【问题描述】:

显然,嵌套 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() 实例更多。此外,您必须做更多的阅读而不是略读才能看到仅在 A 为真时才评估 B。然后,如果您在底部放置 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 的任何反对意见。
  • PS:你同时被点赞和离题:)
  • 等等……我怎么跑题了?我不是说我不是,我只是想知道哪些品质使它离题。
  • 请访问help center - 特别是What types of questions should I avoid asking - 票数接近“主要基于意见”
  • 如果任何代码块改变了条件变量,你的第二个 sn-p 将是错误的。你宁愿在任何地方都使用if else(当然,它只是再次嵌套而没有缩进)

标签: javascript standards simplify nested-if


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多