何时使用else-if而不是if



假设我们有这样的代码:

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

现在让我们逐行检查发生了什么。如果我没有错的话,第一个程序开始检查condition_1是true还是false,那么condition_2也会发生同样的情况。如果这些条件都不成立,程序就会运行"do blablabla"。

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

if (!(condition_1) and condition_2)
do that

但是else然后就可以运行了,我认为每一个else-if语句都可以用一个更长的条件替换为only-if。那么,这是否可以通过仅使用if来替换其他所有if?"do blablabla"何时运行?

第一部分:

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 if&else将被忽略,所有条件将被依次检查,直到找到elsetrue条件。如果没有条件成立,则将执行else。因此,如果两个条件的都是false,则执行do blablabla

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

if (!(condition_1) and condition_2)
do that

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

相当于:(当且仅当condition_1false(

if (!(false) and condition_2)
do that

您可以通过检查以前的条件是否为false来替换其他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的最后一行(}(的下一行。

如果我没有弄错,第一个程序开始检查condition_1是true还是false,那么condition_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必须是false才能对condition_2进行偶数求值。它有助于把花括号去掉:

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

最新更新