【发布时间】:2014-03-17 20:31:53
【问题描述】:
if (Condition1)
{
dothis;
}
else if (Condition1)
{
dothat;
}
出于好奇,当我为else if 调用相同的条件时,当满足Condition1 时,代码的dothat 部分是否仍会执行?这是否因编程语言而异?
【问题讨论】:
标签: if-statement language-agnostic logic
if (Condition1)
{
dothis;
}
else if (Condition1)
{
dothat;
}
出于好奇,当我为else if 调用相同的条件时,当满足Condition1 时,代码的dothat 部分是否仍会执行?这是否因编程语言而异?
【问题讨论】:
标签: if-statement language-agnostic logic
你写的基本上相当于
if(Condition1)
{
dothis;
}
else
{
if(Condition1)
{
dothat;
}
}
所以不,它永远不会被调用。
【讨论】:
不,第二个条件永远不会以任何语言执行。 Here is a basic flowchart of your logic.
但是,如果 Condition1 在第一个条件下以某种方式计算为 false 而在第二个条件下计算为 true,则将调用第二个条件。示例:
<?php
$var = true;
function condition() {
global $var;
$var = !$var;
return $var;
}
if(condition()) {
echo "Conditional 1";
} elseif(condition()) {
echo "Conditional 2";
}
在这种情况下,将打印“条件 2”,因为 condition() 首先评估为 false,然后评估为 true。
【讨论】:
虽然每个 if-else-statement 最多执行一个分支1,但在“条件”包含副作用的情况下,它可能并不总是被执行的if 分支。
例如,考虑this JavaScript code 带有“条件”表达式引入的副作用。
y = -1;
if (++y) { // the "condition" is ++y
alert("1")
} else if (++y) {
alert("2")
}
只执行了一个分支(“2”),但在两种情况下都使用了相同“条件”。由于这些原因,在条件句中产生副作用可能是有问题的。
1 在所有现代主流语言中,if-else 的条件都是“按需”和“按顺序”评估的。因此,无论其他副作用如何,都会执行条件评估为 true 的第一个分支,并且它是 only 执行的分支。
【讨论】:
第二个if 跟在else 之后——因此,只有在第一个if不成功时才会执行。所以不行; dothat 不会被执行。所有(理智的)编程语言都这样做。
但是,某些编程语言具有 else if 的特殊构造,您必须将其编写为一个语句,根据语言的不同,称为 elif、elsif 或 ElseIf。
【讨论】:
由于Condition1 被评估为True,if 的“dothis”将被调用并跳过else if。如果您想调用dothis 和dothat,那么您将拥有两个具有相同Condition1 的if 语句,或者将dothis 和dothat 放在一个if 语句下。这是我在使用过的计算机编程语言中看到的。
Python 示例。
b = 2
if b == 2:
print "Hello"
elif b == 2:
print "World"
...
Hello
【讨论】: