2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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:464968
用户头像

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

关注

评论

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

10个React状态管理库推荐

伤感汤姆布利柏

利用 ASP.NET Core 开发单机应用

不在线第一只蜗牛

.net 架构 分布式 微服务

SD-WAN的突出作用

Ogcloud

SD-WAN SD-WAN组网 SD-WAN服务商

【教程】苹果上架常见要求的有哪些?

字节跳动新一代云原生消息队列实践

字节跳动云原生计算

云原生 消息列队

香港服务器出租的优势分析:为何成为企业首选?

一只扑棱蛾子

香港服务器

TDengine 3.0 四大企业应用案例合集,给你最直观的应用体验

TDengine

tdengine 时序数据库

服务器C盘突然满了,是什么问题

德迅云安全杨德俊

每日一题:LeetCode-958. 二叉树的完全性检验

Geek_4z9ami

面试 算法 LeetCode 二叉树 BFS

区块链游戏解说:Sunflower Land 是什么

Footprint Analytics

区块链游戏 NFT 链游

透过 Footprint 的聚合视图洞察加密世界的全貌

Footprint Analytics

区块链 数据分析 加密货币

京东商品详情数据接口(app)Python

tbapi

京东API接口 京东商品详情接口 京东商品数据采集

SD-WAN和MPLS的区别以及如何选择?

Ogcloud

SD-WAN SD-WAN组网 SD-WAN服务商

为什么Nginx被称为“反向”代理呢?

互联网工科生

服务器 ​Nginx

智能预测:数字化时代的服装企业如何实现准确的需求规划

第七在线

BRC20支持的Dapp:开创去中心化应用的未来

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

简论密码登录安全性

Geek_44385e

登录 密码安全

常见的企业网络问题及SD-WAN解决方案

Ogcloud

SD-WAN SD-WAN组网 SD-WAN服务商

高效集成|聚道云软件连接器实现薪人薪事与每刻报销无缝对接

聚道云软件连接器

案例分享

纯血鸿蒙来了,鸿蒙App开发有可能提速吗?

FinFish

鸿蒙系统 小程序化 小程序技术 鸿蒙Next 纯血鸿蒙

什么是信创业态支持?支持信创的数据库防水坝哪家好?

行云管家

数据库 信创 堡垒机 国产化 数据库防水坝

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