[英]Is - `else if` - just syntactic sugar?
過去我一直認為與我的一些朋友編碼誰認為else if
在Java語句只是語法糖,並與做過任何事情else if
可以只用串行完成if
代替。
但是今天我讀到了一些我認為可能與之矛盾的東西。 以下面的代碼為例,其中int x = 1
。
if(x >= 5){ System.out.println("First condition"); }
else if(x < 5){ System.out.println("Second condition"); }
else if (x < 2){ System.out.println("Third condition"); }
如果您使用seriel if語句(不包含else語句),則會得到輸出;
Second Condition
Third Condition
但是使用上述其他if語句,您實際得到的是
Second Condition
因為else if
語句不會失敗。 因為else if
運行其他第一個,即使滿足條件,也不會再有其他運行。 所以對我的問題。 有沒有一種方法可以使用串行標准if語句來實現此行為?
else if
是語法糖,但if
不是s,則不是連續的。
if (conditionA) {
} else if (conditionB) {
} else if (conditionC) {
}
等效於:
if (conditionA) {
} else {
if (conditionB) {
} else {
if (conditionC) {}
}
}
使用else if
結構的主要好處是減少了嵌套,這使代碼更具可讀性。
編輯
正如其他答案所指出的那樣,在java
,以上代碼甚至都不是正確的語法糖(盡管可能會爭辯說,單個語句的沒有花括號的else塊本身就是語法糖),還有其他語言(例如perl
和使用elsif
ruby
)那里有適當的語法。
我部分不同意@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"); }
如
if (condition1) { System.out.println("First condition"); }
if (condition2) { System.out.println("Second condition"); }
if (condition3) { System.out.println("Third condition"); }
(可以證明條件互斥且無副作用,但通常情況並非如此。)
可以編寫if ... else
而無需else
但是需要額外的標志變量; 例如
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");
}
但是當他說第一種形式是語法糖……適用於任何事物時,我不同意他的看法。 在JLS 14.5中 ,if語句的Java語法規則為:
IfThenStatement:
'if' '(' Expression ')' Statement
IfThenElseStatement:
'if' '(' Expression ')' StatementNoShortIf 'else' Statement
IfThenElseStatementNoShortIf:
'if' '(' Expression ')' StatementNoShortIf 'else' StatementNoShortIf
(“如果不是這樣的話”就是為了避免“晃來晃去”的模棱兩可。這與我的觀點無關……)
else if
將IfThenStatement或IfThenElseStatement用作IfThenElseStatement中的語句,則會得到else if
鏈接。 請注意,語法沒有提及大括號。 大括號的出現只是因為一個Statement可以是一個Block; 再次參見JLS 14.5 。
因此,根據Java語法的說法, if ... else if ...
實際上只是IfThenStatement語法的自然形式,而不是某些特殊的語法糖。
現在,如果Java(假設地)>>也<<支持的elsif
像其他語言一樣,您可能會爭辯說elsif
形式是else if
語法糖,但是...但這與此情形不同。
...盡管有人可能會說,一個語句沒有大括號的else塊本身就是一個語法糖
一個是不正確的:-)
這是一個普通的普通聲明; 往上看。
通常總是使用大括號,但這不是約定,不是語法,並且省略大括號不會帶來任何麻煩。
if語句的一般語法為:
if (condition) statement
要么
if (condition) statement1 else statement2
現在您的問題是, if
在else if
是從一般形式開始的那條statement2
。
有沒有一種方法可以使用串行標准if語句來實現此行為?
if(A){ System.out.println("a"); }
if(not A and B){ System.out.println("else B"); }
if(not A and not B and C){ System.out.println("else C"); }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.