Java决定使用C#及Scala的Lambda语法

Java 8里最重要的更新之一便是引入了Lambda语法,这样可以将匿名函数作为参数或变量。然而,这方面的语法始终未能确定下来,也曾经有过投票,咨询社区更适应哪种语法。

\\

最近,lambda-dev在邮件列表宣布,Java的Lambda语法决定基于C#语法。这种语法在C#语言里已经使用很长时间了(C#在1.0时期便引入了委托类型,并在2.0里支持匿名函数,3.0对Lambda表达式提供支持)。

\\

从调查结果来看,其他一些语法选择(例如BGGA)相对别的设计并没有表现出明显的优势。而在C#和Scala中已经长时间使用的语法体验,意味着会有大量程序员已经熟悉此类语法了(C#和Scala的主要区别,在于匿名函数的参数如何标识其类型:C#使用“int foo”,而Scala使用“foo: int”——人们很容易适应这种细微区别。Java会使用C#的形式“int foo”,因为这已经是Java语言的表示方法了)。

\\
\

我们进行了很广泛的探索,但是最终发现没有哪种选择是明显的赢家(每种形式都有好的方面和不那么好的方面,也没有哪种形式明显好过其他的)。因此,与重新发明一种新的语法相比,我们认为还是选择一种在两种和Java比较相似的语言里——C#和Scala——已经得到证明的语法比较合适。

\
\\

这种语法同时支持表达式和代码块。表示式的形式不需要大括号,并且在执行后返回结果。语法块的形式需要使用大括号,除非使用了return关键字,否则不会直接返回结果。邮件里也给出了示例:

\\
x =\u0026gt; x + 1\(x) =\u0026gt; x + 1\(int x) =\u0026gt; x + 1\(int x, int y) =\u0026gt; x + y\(x, y) =\u0026gt; x + y\(x, y) =\u0026gt; { System.out.printf(\"%d + %d = %d%n\
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值