【问题标题】:Is there any difference between using multiple if statements and else if statements?使用多个 if 语句和 else if 语句之间有什么区别吗?
【发布时间】:2011-01-08 21:16:12
【问题描述】:
此问题专门针对 shell 脚本,但可能与任何编程语言有关。
在 shell 脚本中使用多个 if 语句和使用 elif 语句之间有什么区别吗?而且,case 语句不适用于我的情况。
【问题讨论】:
标签:
if-statement
language-agnostic
【解决方案1】:
是的,可能。考虑一下(C#、Java 等):
int x = GetValueFromSomewhere();
if (x == 0)
{
// Something
x = 1;
}
else if (x == 1)
{
// Something else...
}
对比这个:
int x = GetValueFromSomewhere();
if (x == 0)
{
// Something
x = 1;
}
if (x == 1)
{
// Something else...
}
在第一种情况下,只会出现 一个“某事”或“其他事...”。在第二种情况下,第一个块的副作用使第二个块中的条件为真。
再举一个例子,开始时条件可能不是互斥的:
int x = ...;
if (x < 10)
{
...
}
else if (x < 100)
{
...
}
else if (x < 1000)
{
...
}
如果你去掉这里的“else”,那么只要一个条件匹配,其余的也会。
【解决方案2】:
这与效率和您的需求有关。 If 语句相互独立执行;每个人都会跑。 Else if 语句仅在之前的 ifs 失败时执行。
【解决方案3】:
if (x == 0) {
// 1
}
if (x >= 0) {
// 2
}
if (x <= 0) {
// 3
}
上面的代码将产生与下面的代码不同的值x=0。
if (x == 0) {
// 1
} else if (x >= 0) {
// 2
} else {
// 3
}
在第一种情况下,1、2 和 3 的所有语句都将为 x = 0 执行。在第二种情况下,只有语句 1 将是。
【解决方案4】:
当您有多个 if 语句时,每个语句都被单独评估,如果条件正确,则可能会执行所有这些语句中的代码。如果你有 if / elif 语句,第二个条件只会在第一个条件评估的特定结果之后评估。
考虑这个伪代码:
If (cond A) { action 1}
If (cond B) { action 2}
如果 cond A 和 cond B 都为真,则两个动作都会执行。
另一方面,这个伪代码:
If (cond A) {action 1}
Elif (cond B) {action 2}
无论两个条件如何评估,都只会执行两个操作中的一个(或都不执行)。