写点什么

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

  • 2011-09-10
  • 本文字数:853 字

    阅读完需:约 3 分钟

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 => x + 1
(x) => x + 1
(int x) => x + 1
(int x, int y) => x + y
(x, y) => x + y
(x, y) => { System.out.printf("%d + %d = %d%n", x, y, x+y); }
() => { System.out.println("I am a Runnable"); }

Lambda 表达式的关键优势,在于它们会对参数进行类型推断。不过在某些情况下,编译器依然无法推断出正确类型(尤其是出现操作符重载的时候,例如:(x, y) => x + y 在 Java 编译器不知道 x 和 y 是 int 还是 double 时候)。一般来说,类型推断引擎都能自动得出正确的代码,如果需要更多提示,程序员也始终可以显示地增加类型信息。

不久的将来会发布支持新语法的编译器以供体验。

2011-09-10 05:464952
用户头像

发布了 157 篇内容, 共 62.5 次阅读, 收获喜欢 6 次。

关注

评论

发布
暂无评论
发现更多内容

怎样做升级与维护YashanDB数据库降低系统风险

数据库砖家

使用YashanDB数据库进行日志数据管理

数据库砖家

哈尔滨三级等保办理流程详解:规范步骤与操作要点

等保测评

多平台服务中的代码混淆与内存安全:ArkTS 应用的安全优化

最新动态

怎样做使用 YashanDB 数据库实现数据一致性保障?

数据库砖家

怎样做数据库安全加密传输?YashanDB多层防护方案

数据库砖家

鸿蒙NEXT应用国际化:语言与区域设置

最新动态

鸿蒙NEXT安全访问新范式:系统Picker与安全控件解析

最新动态

设计YashanDB数据库的高效缓存策略

数据库砖家

HarmonyOS中的BLE广播与扫描:实现低功耗蓝牙通信

最新动态

HarmonyOS NEXT分布式管理核心功能解析:网络服务和数据传输的实现二

最新动态

哈尔滨二级等保的核心价值:企业信息安全与合规的双重保障

等保测评

使用YashanDB数据库实现安全数据共享机制

数据库砖家

仓储管理系统(WMS)(源码+文档+讲解+演示)

深圳亥时科技

开源‘

九宫格自由流转拼图游戏

最新动态

华为鸿蒙 ExtensionAbility 组件:扩展应用功能的舞台

最新动态

1688店铺所有商品API详解

tbapi

1688API接口 1688数据接口 1688店铺数据采集 1688店铺所有商品

轻松上手-Navigation路由 H5

最新动态

怎样做全面配置YashanDB提升数据处理性能?

数据库砖家

怎样做设计适合企业的YashanDB数据库解决方案

数据库砖家

JPG 与 JPEG 有什么区别?是不是一样的?

左诗右码

如何实现YashanDB的多用户权限管理

数据库砖家

使用YashanDB实现大数据存储与分析

数据库砖家

实现多子类型输入法:如何在 HarmonyOS中加载不同的输入模式

最新动态

鸿蒙分布式商城应用开发探究

最新动态

如何使用YashanDB提升企业数据处理能力

数据库砖家

怎样做数据库查询缓存优化?YashanDB技术优势详解

数据库砖家

鸿蒙NEXT应用全球化之路:国际化与本地化

最新动态

拆解需求层级:如何让价值精准传递,撬动产品成功?

IPD产品研发管理

如何在鸿蒙NEXT系统中构建安全的数据防泄漏体系

最新动态

HarmonyOS的连接艺术之六: 使用 Deep Linking,灵活定义链接规则

最新动态

Java决定使用C#及Scala的Lambda语法_Java_Alex Blewitt_InfoQ精选文章