我正在使用Java 6.
你认为有条件表达式的原因
String plan = ( isEconomyGood() ? "find a job" : "stay with mom" ) ;
而不是循环表达式
weeklyPlan.add( schedule.hasNext() => schedule.next() );
在hasNext()
期间将计划中的元素添加到weeklyPlan中。
或者某些语言是否具有此功能或类似功能?
答案 0 :(得分:3)
这些“循环表达式”的形式略有不同,称为closures。在groovy-code中:
schedule.each() {
weeklyPlan.add(it)
}
那就是 - 你可以定义schedule
集合的每个对象会发生什么。
Java尚不支持闭包。它使用匿名类实现。
当然闭包不止于此,这只是他们的应用之一。
答案 1 :(得分:1)
我认为这是因为条件表达式更容易实现,而不必担心讨厌的细节。例如,查看您的代码,您是说多周调用weeklyPlan.add?在这种情况下,=>
运算符的范围只是跳到包含它的括号之外。
C#在LINQ中具有可以执行与您描述的操作类似的操作的功能。它使用闭包和扩展方法实现这些:
schedule.AsParallel().ForAll(s => weeklyPlan.add(s));
但是这些语言结构比Java开始时要复杂得多,而且.NET运行时的转换速度比Java平台快得多,主要是出于政治原因。 Java 7应该具有闭包功能,但它们被推回到“下一版本”。
答案 2 :(得分:0)
因为设计师希望保持语言简单。 Java中许多丑陋的东西来自于从其他语言中导入构造,以简化开发人员转换到Java(特别是来自C ++)的过渡。三元运算符就是一个很好的例子。 (原语的处理是另一个更有争议的案例)
在1.5中引入泛型之前,“教科书”Java代码将具有非常简单和一致的语法。即使是匿名的内部类,最棘手的1.5之前的结构,在半小时内也很容易理解。