【问题标题】:When to use else if instead of if?何时使用 else if 而不是 if?
【发布时间】:2020-02-29 18:52:21
【问题描述】:

假设我们有这样的代码:

if (condition_1)
   do this
if (condition_2)
   do that
else
   do blablabla

现在是这个:

if (condition_1)
   do this
else if (condition_2)
   do that
else
   do blablabla

现在让我们逐行检查发生了什么。如果我没记错的话,第一个程序开始检查条件_1 是真还是假,那么条件_2 也会发生同样的事情。如果这些条件都不成立,程序就会运行“do blablabla”。

第二个程序从检查condition_1开始,如果它为假,则检查condition_2。如果 condition_2 如果为假,则 if 什么都不做(我的意思是它忽略 else 语句)。 如果是这样,第二个程序中的第二个 if 语句可以替换为:

if (!(condition_1) and condition_2)
   do that

但是 else then 可以运行,我认为每个 else if 语句都可以替换为 only if 条件更长一些。那么这是否可以通过仅使用 if 来替换其他所有内容? “do blablabla”什么时候播出?

【问题讨论】:

  • 如果condition_1condition_2 都不成立,则第二个片段确实运行do blablabla
  • 您对示例的解释是错误的。在您的第一个示例中,如果condition_1 == truecondition_2 == falsethisblablabla 都将被执行。
  • 是的,具有if 但没有else 的编程语言仍然是图灵完备的——只是可读性较差。原则上确实可以将任何 C++ 程序转换为不使用else 的等效程序。
  • 当你需要else你会知道的。
  • 我也认为 OP 想太多了。如果逻辑需要else if,则使用else if

标签: c++ if-statement


【解决方案1】:

第一部分:

 if (condition_1)
       do this

// previous if has nothing to do with this if & else 

if (condition_2)
   do that
else
   do blablabla

这种情况如果condition_2为真则do that将被执行,否则do blablabla 将被执行..

现在是第二部分:

if (condition_1)
   do this
else if (condition_2)
   do that
else
   do blablabla

在这里,第一个条件将被执行,else ifelse 的其余部分将被忽略,所有条件将依次检查直到elsetrue 条件为成立。 如果没有条件成立,那么else 将被执行。所以do blablabla会在两个条件中两个都是false

时被执行

最后,是的,第二个if 可以替换为:

if (!(condition_1) and condition_2)
   do that

这是因为只有当 condition_1 为假时才会检查第二个 if(do that 将被执行).. 并且 condition_2 为真。

相当于:(当且仅当condition_1false

if (!(false) and condition_2)
       do that

你可以通过检查之前的条件是否为假来替换else ifs,这样每个else ifs 都带有之前的条件,这很繁琐。

例子:

if (a) {
    // do task1
} else if (b) {
    // do task2
} else if (c) {
    // do task3
} else {
    // do task4
}

相当于:

if (a) {
    // do task1
}
if (!a and b) {
    // do task2
}
if (!a and !b and c) {
    // do task3
}
if (!a and !b and !c) {
   // here is the else
   // do task4
}

什么时候用else if代替if?

一般来说,我们将if、else if 和else 链接在最后,以确保执行一个条件,如果一个条件是true,则忽略其余条件并执行最后一行的下一行 (}) 最后一行 else

【讨论】:

    【解决方案2】:

    如果我没记错的话,第一个程序开始检查条件_1 是真还是假,然后条件_2 也会发生同样的事情。如果这些条件都不成立,程序就会运行“do blablabla”。

    不,condition_1 不会影响 condition_2 中发生的事情。 condition_1 可以是 truefalse,但只有 condition_2 在第二种情况下很重要:

    if (condition_1) {
       do this
    }
    
    // --- no connection here ---
    
    if (condition_2) {
       do that
    } else {
       do blablabla
    }
    

    在第二个版本中有所不同,从那时起,condition_1 必须是 falsecondition_2 才能被评估。把大括号去掉是有帮助的:

    if (condition_1) {
        do this
    } else {
        if (condition_2) {
            do that
        } else {
            do blablabla
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-10-14
      • 2018-09-26
      • 1970-01-01
      • 2022-11-25
      • 2011-09-06
      • 2011-10-02
      • 2021-11-08
      • 1970-01-01
      相关资源
      最近更新 更多