我使用Java 6有條件表達式而不是循環表達式的原因是什麼?
你認爲有一個原因,還有條件表達式
String plan = (isEconomyGood() ? "find a job" : "stay with mom") ;
,而不是循環表達式
weeklyPlan.add(schedule.hasNext() => schedule.next());
它增加了從時間表元素融入weeklyPlan而hasNext()
。
或者做一些語言有這個功能或類似的東西?
我使用Java 6有條件表達式而不是循環表達式的原因是什麼?
你認爲有一個原因,還有條件表達式
String plan = (isEconomyGood() ? "find a job" : "stay with mom") ;
,而不是循環表達式
weeklyPlan.add(schedule.hasNext() => schedule.next());
它增加了從時間表元素融入weeklyPlan而hasNext()
。
或者做一些語言有這個功能或類似的東西?
我認爲這是因爲條件表達式更容易實現,而不必擔心煩人的細節。例如,查看你的代碼,你是否認爲weeklyPlan.add會被多次調用?在這種情況下,您的=>
運算符的範圍剛剛跳出包含它的括號之外。
C#在LINQ中具有可以執行類似操作的功能。它實現這些使用閉包和擴展方法:
schedule.AsParallel().ForAll(s => weeklyPlan.add(s));
但這些都是更棘手的語言結構比Java開始了和.NET運行時已經能夠更迅速地改變比Java平臺有,主要是爲了政治原因。 Java 7應該具有關閉功能,但他們被推回到「下一個版本」。
這些「循環表達式」以稍微不同的形式被稱爲closures。在Groovy代碼:
schedule.each() {
weeklyPlan.add(it)
}
那就是 - 你可以定義與schedule
集合中的每個對象會發生什麼。
Java尚不支持關閉。在那裏它是用匿名類實現的。
當然封閉不止這些,而這只是他們的應用之一。
因爲設計師想保持簡單的語言。 Java中很多醜陋的東西來自於從其他語言中導入結構,以便開發人員轉移到Java(尤其是從C++)轉換到Java。三元運算符就是一個很好的例子。 (對原語的處理是另一個更有爭議的案例)
直到1.5中引入泛型,'教科書'Java代碼纔會有一個非常簡單和一致的語法。即使是匿名的內部類,最棘手的1.5之前的構造,在半小時內也很容易被挖掘出來。