写点什么

Java Lambda 语法的首个版本引发众多争论

  • 2010-06-22
  • 本文字数:1618 字

    阅读完需:约 5 分钟

近日,Oracle 的 Maurizio Cimadamore 在 OpenJDK Mercurial 仓库发布了初始的 lambda 实现,这让我们有机会首次目睹该新语法的容貌,同时也引发了社区的广泛争论。

目前的原型支持如下特性:

下面的代码片段声明了一个简单的 lambda 表达式,该表达式接收一个整型,加一后返回:

复制代码
int i1 = #()(3).();
assertTrue(3 == i1);
Integer i2 = #()(3).();
assertTrue(3 == i2);
int i3 = #(int x)( x + 1 ).(3);
assertTrue(4 == i3);
int i4 = #(Number x)(x.intValue()).(new Float(3.0f));
assertTrue(3 == i4);
Object o = #()(3);
assertTrue(o != null);

该原型支持规范草案所描述的语法,如果想要更好地了解语法,读者可以看看衰退 测试

因为 Java 通常使用长单词而非符号,因此有很多人觉得这种语法太笨拙,并不符合语言本身的感官。

来自 Ajaxian 的 Dion Almaer 认为这种语法更接近于 Perl 而非 Java

Integer i2 = #()(3).(); //i2 = 3
int i4 = #(Number x)(x.intValue()).(new Float(3.0f)); //i4 = 3 Erm, Java? Or Perl!!

无独有偶,Ruby on Rails 的创始人 David Heinemeier Hansson 认为这种语法太乱

Java 7 新的闭包语法:int i4 = #(Number x)(x.intValue()).(new Float(3.0f));——这一行也太长了吧!

不少 Java 开发者在论坛和讨论组上抨击这种 lambda 语法:

Java Posse Group “吼吼,这也太恶心了吧。源代码乱的一团糟”。

“恩,这种恶心的语法倒是能够减轻编译器开发者的工作量。一定还有更好的方案能够解决这个问题。即便是 Obj-C 的块都比这强(至少语法比这强)”。

”为了保证向后兼容,Java 没法实现更优雅的解决方案,但现在这其实根本不算什么问题“。

Baptiste Wicht 的博文 ”一看到 int i1 = #()(3).(); 这一行我就无语了,第一眼还以为代码写错了呢“。

”肯定还有改进的空间。如果用 adder(1, 2) 代替 adder.(1, 2),我觉得会好很多,把点放在中间并不符合 Java 风格“。

Hacker News “这种语法太丑陋了”。

“从实践上来说,Java 并不会使用过多的符号。他们这帮人为什么要这么做呢?我并不是说反对他们(相对于长单词来说,我也更偏爱符号,虽说这会导致更长的学习曲线),但这与 Java 规范格格不入”。

另一方面,Nick Wiedenbrueck 认为该提案由来已久, Java 社区应该认识到将要发生什么

现在有几个提案,上次的 Devoxx 大会上也宣布了提案草案与规范草案,但社区并没有对此进行过充分的讨论。什么原因呢?我有一些假设。lambda 项目太安静了么?根本就没有几篇博文或是示例介绍 lambda。社区出什么问题了么?社区领域跑哪儿去了?难道都忙着学 Scala 去了?静态类型语言(没有类型推断)中的闭包就应该这么复杂么?

最后,该原型的创建者之一的 Brian Goetz 说到,在进入到产品阶段前还会继续改进语法

记住,这只是早期的概念验证阶段。这里面的语法都是暂时的,随着 Lambda 项目的不断发展,语法也会发生很大的变化。同时,还有很多比语法重要的东西,我们的全部精力都放在这上面了——语法要为之让路。

InfoQ 上有篇深度探索面向Java 语言的Lambda 的文章,感兴趣的读者不妨移步一观(文章包含了为何当前的语法是adder.(1, 2) 而不是adder(1, 2))。

社区观点: InfoQ 中文站.NET 社区编辑赵劼针对 Java Lambda 表达式专门发表了一篇题为《浅谈Java 7 的闭包与Lambda 表达式之优劣》的博文,深入浅出地探讨了Java Lambda 表达式的使用方式及其缺陷,博文以大量的实例阐述了目前Java Lambda 表达式的种种硬伤,读者可以从中了解到当前Java Lambda 表达式的现状。此外,该文的评论也很丰富,包含了很多有意义的信息,会对读者起到一定的帮助作用。

查看英文原文: First Version of Java Lambda Syntax Sparks Debate

2010-06-22 05:073525
用户头像

发布了 88 篇内容, 共 265.1 次阅读, 收获喜欢 8 次。

关注

评论

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

京东零售推荐系统可解释能力详解

京东零售技术

人工智能 推荐模型 可解释

大模型准确率从17%到90%!为什么提示词工程是今天最珍贵的技能?

本原智数

人工智能 大模型 生成式AI 提示词工程 本原智数

cleanmymac有必要买吗?Mac清理软件哪个好用?

阿拉灯神丁

软件包 清理工具 mac系统维护 CleanMyMac X中文版

项目管理流程图解:简化复杂任务

爱吃小舅的鱼

项目管理 项目流程 项目规划

华为应用市场:赋能开发者全生命周期服务体验

热爱编程的小白白

我们的 WebAssembly 实验:扩展 NGINX Agent

NGINX开源社区

nginx Wasm nginx 开源版

纽约时报诉OpenAI:生成式AI时代的数据陷阱与法律边界

本原智数

人工智能 数据采集 数据合规 本原智数

三分之一的生成式AI项目将被放弃?从零开始看RAG如何变现

本原智数

人工智能 大模型 生成式AI rag 本原智数

小游戏3.0时代,应回归到游戏价值本身

FinFish

小程序容器 小游戏 小游戏技术 实时互动技术

UBBF 2024,建起超宽带与AI间的博斯普鲁斯大桥

脑极体

10人小公司管理指南:从沟通到绩效评估

爱吃小舅的鱼

公司管理

如何正确保护Python代码,不是Pyinstaller

LLLibra146

Python 代码保护

开源项目管理工具如何选?9款值得一试的选择

爱吃小舅的鱼

开源项目管理工具

一书了解AI的下一个浪潮!

博文视点Broadview

摩尔线程开源vLLM-MUSA 加速国产GPU AI

吴脑的键客

人工智能

ppt目录页怎么做好看?一键切换ppt模板布局的神器来了!

职场工具箱

效率工具 职场 PPT 高效办公 AI生成PPT

如何在IT项目管理中实现团队协作

爱吃小舅的鱼

项目管理 IT IT项目管理

管理团队的最佳实践

爱吃小舅的鱼

管理团队

研发管理与项目管理:痛点分析与建议

爱吃小舅的鱼

项目管理 研发管理 管理项目

SpringBoot启动原理详解(图文全面总结)

江南一点雨

极狐GitLab 足下科技,加速国产智驾操作系统的发展与普及

极狐GitLab

gitlab 智能驾驶 客户案例

淘宝商品详情API接口Java GET调用指南

代码忍者

API 接口 pinduoduo API

AOT使用经验总结

沙漠尽头的狼

共建行业生态,智谱大模型生态合作伙伴联盟成立

技术研究院

NocoBase 实战教程 —— 任务管理系统

NocoBase

开源 低代码 教程 无代码

认识鸿蒙Context

龙儿筝

鸿蒙

Java Lambda语法的首个版本引发众多争论_Java_Dio Synodinos_InfoQ精选文章