假设我们有这样的代码:
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
将被忽略,所有条件将被依次检查,直到找到else
或true
条件。如果没有条件成立,则将执行else
。因此,如果两个条件的和都是false
,则执行do blablabla
最后,是的,第二个if
可以替换为:
if (!(condition_1) and condition_2)
do that
这是因为只有当condition_1
为假时,才会检查第二个if(将执行do that
(。。并且CCD_ 14为真。
相当于:(当且仅当condition_1
是false
(
if (!(false) and condition_2)
do that
您可以通过检查以前的条件是否为false来替换其他if
s,这样每个else if
s都有以前的条件,这很乏味。
示例:
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
可以是true
或false
,但只有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
}
}