2010-11-09 23 views
0

我使用Java 6有條件表達式而不是循環表達式的原因是什麼?

你認爲有一個原因,還有條件表達式

String plan = (isEconomyGood() ? "find a job" : "stay with mom") ; 

,而不是循環表達式

weeklyPlan.add(schedule.hasNext() => schedule.next()); 

它增加了從時間表元素融入weeklyPlan而hasNext()

或者做一些語言有這個功能或類似的東西?

回答

1

我認爲這是因爲條件表達式更容易實現,而不必擔心煩人的細節。例如,查看你的代碼,你是否認爲weeklyPlan.add會被多次調用?在這種情況下,您的=>運算符的範圍剛剛跳出包含它的括號之外。

C#在LINQ中具有可以執行類似操作的功能。它實現這些使用閉包和擴展方法:

schedule.AsParallel().ForAll(s => weeklyPlan.add(s)); 

但這些都是更棘手的語言結構比Java開始了和.NET運行時已經能夠更迅速地改變比Java平臺有,主要是爲了政治原因。 Java 7應該具有關閉功能,但他們被推回到「下一個版本」。

3

這些「循環表達式」以稍微不同的形式被稱爲closures。在Groovy代碼:

schedule.each() { 
    weeklyPlan.add(it) 
} 

那就是 - 你可以定義與schedule集合中的每個對象會發生什麼。

Java尚不支持關閉。在那裏它是用匿名類實現的。

當然封閉不止這些,而這只是他們的應用之一。

0

因爲設計師想保持簡單的語言。 Java中很多醜陋的東西來自於從其他語言中導入結構,以便開發人員轉移到Java(尤其是從C++)轉換到Java。三元運算符就是一個很好的例子。 (對原語的處理是另一個更有爭議的案例)

直到1.5中引入泛型,'教科書'Java代碼纔會有一個非常簡單和一致的語法。即使是匿名的內部類,最棘手的1.5之前的構造,在半小時內也很容易被挖掘出來。

相關問題