【发布时间】:2017-01-15 06:35:22
【问题描述】:
前几天我在思考“else-if”语句的创建以及为什么它的执行方式会导致每个事件都保证互斥。
例如:
if(condition A)
//condition
else if(condition B)
//will run if condition A is false and condition B is true
else if(condition C)
//will run if condition A is false and condition B is false and condition C is true
else if(condition D)
//will run if all the above conditions are false and condition D is true.
我认为如果条件 A 不为真,则检查所有“else”语句会更有意义,而不仅仅是在 B 或 C 为真时停止。我的直觉认为让上面的代码等价于这个会更自然:
if(condition A)
//condition
else {
if(condition B)
//...
if(condition C)
//...
if(condition D)
//...
}
因此,为什么我们要以我们的方式定义 else-if?是为了规避不必要的 if-else 语句嵌套吗?我只是认为它是模棱两可的,让它等同于我的第二个代码 sn-p 是有意义的。
编辑:为了消除混淆,我完全理解这两个语句并不总是等价的。我的问题主要是问为什么 else-if 被定义为第一个语句并不总是等同于第二个语句?我试图理解为什么 else-if 会这样运行。
编辑 2:我想我终于明白了我的问题的根本本质。通常,“else”检查上述语句是否为假,如果是,则运行该语句。但是,在 elif 的情况下,它会在运行之前检查上述所有语句是否为假。这与重复的问题不同,因为它询问的是 if-else 本身的性质,而不是它的详尽性。
编辑 3:我打开了一个新问题,希望更清楚,找到 here。
【问题讨论】:
-
没有人阻止您使用嵌套方法。
-
如果条件B、C、D不互斥,你的代码片段的执行结果会不一样。
-
虽然它们并不总是一样的。
-
基于 C 语法的语言(如 Java)实际上并没有“else-if”语句。它们有“if-else”,其中“else”部分可以包含另一个“if-else”。
-
正如@DYZ 所说,您显示的两个 sn-ps 是不等价的。而且可能更糟糕的是,第二个 sn-p 不遵循您在第一个 sn-p 的 cmets 中设置的规则。
标签: java