Java -`else if`-只是语法糖吗?
在过去,我曾与我的一些程序员朋友争论过,他们认为Java中的else-if语句只是语法糖,而使用else-if所做的任何事情都可以使用串行if来完成 但今天我读到了一些我认为可能与之矛盾的东西。以下面的代码为例,其中int x=1 但是通过上面的if语句,你实际上得到的是Java -`else if`-只是语法糖吗?,java,if-statement,Java,If Statement,在过去,我曾与我的一些程序员朋友争论过,他们认为Java中的else-if语句只是语法糖,而使用else-if所做的任何事情都可以使用串行if来完成 但今天我读到了一些我认为可能与之矛盾的东西。以下面的代码为例,其中int x=1 但是通过上面的if语句,你实际上得到的是 Second Condition 否则,如果声明没有通过。因为如果运行了第一个else,那么即使满足条件,也不会有其他的else在它之后运行。所以我的问题。有没有一种方法可以通过串行标准if语句实现这种行为 有没有一种方法可
Second Condition
否则,如果声明没有通过。因为如果运行了第一个else,那么即使满足条件,也不会有其他的else在它之后运行。所以我的问题。有没有一种方法可以通过串行标准if语句实现这种行为
有没有一种方法可以通过串行标准if语句实现这种行为
有没有一种方法可以通过串行标准if语句实现这种行为
elseif是一个语法糖,但不适用于串行if
相当于:
if (conditionA) {
} else {
if (conditionB) {
} else {
if (conditionC) {}
}
}
使用elseif结构的主要好处是减少了嵌套,这使代码更具可读性
编辑
正如其他答案所述,在java中,上述内容甚至不是正确的语法糖,尽管有人可能会认为没有大括号的else块本身就是一种语法糖,但也有其他语言,如elsif和elsif,它们都有正确的语法。else if是一种语法糖,但不适用于系列ifs
相当于:
if (conditionA) {
} else {
if (conditionB) {
} else {
if (conditionC) {}
}
}
使用elseif结构的主要好处是减少了嵌套,这使代码更具可读性
编辑
正如其他答案所述,在java中,上述内容甚至不是合适的语法糖,尽管有人可能会认为没有大括号的else块本身就是一种语法糖,但还有其他语言,如,对于elsif,有一个适当的语法来表示它。if语句的一般语法是:
if条件语句
或
if条件语句1 else语句2
现在来回答你的问题,如果在else if中
是该语句2从常规形式开始的部分。if语句的常规语法为:
if条件语句
或
if条件语句1 else语句2
现在来回答你的问题,如果在else if中
是从一般形式开始的陈述。我部分不同意@Uri Agassi 他说得对,你一般不能重写:
if (condition1) { System.out.println("First condition"); }
else if (condition2) { System.out.println("Second condition"); }
else if (condition3) { System.out.println("Third condition"); }
作为
您可以在条件相互排斥且无副作用的情况下使用,但通常情况下并非如此
如果。。。else没有else,但它需要额外的标志变量;e、 g
boolean f = false;
if (condition1) {
System.out.println("First condition");
f = true;
}
if (!f && condition2) {
System.out.println("Second condition");
f = true;
}
if (!f && condition3) {
System.out.println("Third condition");
}
但我不同意他的说法,他说第一种形式是句法上的糖。。。无论如何。if语句的Java语法规则如下所示:
不短的if元素是为了避免挂起else歧义。这与我的论点无关
通过使用ifthenelstatement或ifthenelstatement作为ifthenelstatement中的语句,我们可以得到else if链接。注意语法中没有提到花括号。花括号之所以出现,是因为语句可以是块;再见
所以根据Java语法的说法,如果。。。否则如果。。。事实上,它只是IFthenstation语法的一种自然形式,而不是一些特殊的语法糖
现在,如果Java假设>>也的话,我部分不同意@uriagassi 他说得对,你一般不能重写:
if (condition1) { System.out.println("First condition"); }
else if (condition2) { System.out.println("Second condition"); }
else if (condition3) { System.out.println("Third condition"); }
作为
您可以在条件相互排斥且无副作用的情况下使用,但通常情况下并非如此
如果。。。else没有else,但它需要额外的标志变量;e、 g
boolean f = false;
if (condition1) {
System.out.println("First condition");
f = true;
}
if (!f && condition2) {
System.out.println("Second condition");
f = true;
}
if (!f && condition3) {
System.out.println("Third condition");
}
但我不同意他的说法,他说第一种形式是句法上的糖。。。无论如何。if语句的Java语法规则如下所示:
不短的if元素是为了避免挂起else歧义。这与我的论点无关
通过使用ifthenelstatement或ifthenelstatement作为ifthenelstatement中的语句,我们可以得到else if链接。注意语法中没有提到花括号。花括号之所以出现,是因为语句可以是块;再见
所以根据Java语法的说法,如果。。。否则如果。。。事实上,它只是IFthenstation语法的一种自然形式,而不是一些特殊的语法糖
现在假设Java>>alsoThere可能是,但是为什么要这样做呢?如果你想要失败,不要把Else放在ifs之前。更好的方法是使用switch..case.@RohitJain-这只是一个学术问题,而不是其他任何问题。在我想象的大多数情况下,我都会继续使用else。哇,所有的反对票到底是怎么回事?我读了规则,这没有违反任何规则。我查了一下其他问题
据我所知,这是一个原创的问题。你的问题总共有0票。有什么问题吗?事实上,有了+3和-3,你就获利了,因为上升票比下降票更重要。我不知道投票被否决的原因,但不是这里的每个人都是这样。可能有,但你为什么要这样做?如果你想失败,不要把其他人放在国际单项体育联合会之前。更好的方法是使用switch..case.@RohitJain-这只是一个学术问题,而不是其他任何问题。在我想象的大多数情况下,我都会继续使用else。哇,所有的反对票到底是怎么回事?我读了规则,这没有违反任何规则。我先检查了其他问题,就我所知,这是原始问题。你的问题总共有0票。有什么问题吗?事实上,有了+3和-3,你就获利了,因为上升票比下降票更重要。我不知道投票被否决的原因,但不是这里的每个人都是这样。@Val:那不一样。如果A和B在区块内发生变化怎么办?切换什么?连续完成的开关盒?@deviantfan怎么不一样?什么改变了?为什么要改变?为什么不一样?@Val:对于if-elseif-elseif-elseif-else,最多只能执行其中一个部分,而与其中的代码无关。在您的代码中,我可以更改ifA部分中的A,以便下一部分也可以执行……等等。@deviantfan还有什么?你可以把printlna一个人留下来修改我的代码。这永远不会打印B和C。然后呢?当然,这两段不同的代码可以独立更改,从而失去连贯性。它是如何使两个具有相同语义的替代实现不同的呢。你如何定义平等?我总是可以这样定义它:你没有完全相同的东西。@Val:那不一样。如果A和B在区块内发生变化怎么办?切换什么?连续完成的开关盒?@deviantfan怎么不一样?什么改变了?为什么要改变?为什么不一样?@Val:对于if-elseif-elseif-elseif-else,最多只能执行其中一个部分,而与其中的代码无关。在您的代码中,我可以更改ifA部分中的A,以便下一部分也可以执行……等等。@deviantfan还有什么?你可以把printlna一个人留下来修改我的代码。这永远不会打印B和C。然后呢?当然,这两段不同的代码可以独立更改,从而失去连贯性。它是如何使两个具有相同语义的替代实现不同的呢。你如何定义平等?我总是可以这样定义它,你没有相同的东西。它不是一个语法糖,大括号只是不需要,当只有一个语句时。它不是语法糖。“elseif”中的“if”启动另一条语句。我想你说的就像是说‘else x=y+1;’是语法上的甜言蜜语。@Val如果你指的是我,我没有攻击任何人,他的回答很好。只是我不同意这里的“语法糖”这个词。它不是一个语法糖,当只有一个语句时,大括号是不需要的。它不是语法糖。“elseif”中的“if”启动另一条语句。我想你说的就像是说‘else x=y+1;’是语法上的甜言蜜语。@Val如果你指的是我,我没有攻击任何人,他的回答很好。只是我不同意这里的“语法糖”这个词。你能添加一个来源吗?否则很难决定谁是对的。因为在不了解Java的深入实现的情况下,您或Uri可能是正确的。源代码是Java语言规范中定义的Java语法。剩下的是逻辑论证。。。source>>我可以添加一个源吗?否则很难决定谁是对的。因为在不了解Java的深入实现的情况下,您或Uri可能是正确的。源代码是Java语言规范中定义的Java语法。剩下的是逻辑论证。。。来源>>我
if (condition1) { System.out.println("First condition"); }
if (condition2) { System.out.println("Second condition"); }
if (condition3) { System.out.println("Third condition"); }
boolean f = false;
if (condition1) {
System.out.println("First condition");
f = true;
}
if (!f && condition2) {
System.out.println("Second condition");
f = true;
}
if (!f && condition3) {
System.out.println("Third condition");
}
IfThenStatement:
'if' '(' Expression ')' Statement
IfThenElseStatement:
'if' '(' Expression ')' StatementNoShortIf 'else' Statement
IfThenElseStatementNoShortIf:
'if' '(' Expression ')' StatementNoShortIf 'else' StatementNoShortIf