有条件表达式而不是循环表达式的原因是什么?

时间:2010-11-09 22:31:13

标签: java programming-languages

我正在使用Java 6.

你认为有条件表达式的原因

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

而不是循环表达式

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

hasNext()期间将计划中的元素添加到weeklyPlan中。

或者某些语言​​是否具有此功能或类似功能?

3 个答案:

答案 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之前的结构,在半小时内也很容易理解。