AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

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

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

关注

评论

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

独享http代理与普通http代理相比,独享贵的因素有哪些?

巨量HTTP

代理IP http代理

WorkPlus打造智慧企业移动门户,开启高效办公新时代

BeeWorks

时序数据库 IoTDB 发布端边云原生解决方案,有效优化工业互联网数据上传时效与资源消耗

Apache IoTDB

infoQ 迁移开始

愤毛阿青

C++中的四种类型转换运算符

芯动大师

C语言

好物周刊#2:AI 写作助手

村雨遥

软件 网站 项目 插件 资料

在信创化的浪潮下,银行应该如何选择

Onegun

信创 信创生态

金融业需要的大模型,是一个系统化工程

脑极体

大模型

任正非“苹果是华为的老师”;音频编解码标准 L2HC 发布;GNU 和自由软件运动四十周年丨RTE开发者日报 Vol.53

声网

专访中欧财富伍春兰:财富管理行业数字化转型升级,数据库如何选型?

PingCAP

数据库 TiDB

重装亮相!9 月 22 日平凯数据库 - TiDB 企业版全解读等你来!

PingCAP

数据库 TiDB 平凯星辰 平凯数据库

静态分析在DevSecOps中的应用

Tom(⊙o⊙)

软件需求文档、设计文档、开发文档、运维文档大全

金陵老街

项目管理 #运维

项目流程管理处理推荐 OmniPlan Pro 4 最新激活中文

胖墩儿不胖y

Mac软件 项目流程管理

企业该如何迈好降本增效的第一步?

ToB行业头条

无代码开发和低代码开发的本质区别

互联网工科生

无代码开发 低代码开发 JNPF

安全保护策略:iOS应用程序代码保护的关键步骤和技巧

怎么使用cpu调用SDK进行开发?

矩视智能

机器视觉

WorkPlus局域网即时通信软件,打造高效协作的智能选择

BeeWorks

豆瓣评分9.6!Mybatis技术原理实战

程序员万金游

mybatis #java #Spring #后端

企业数据安全重要?私有化部署IM,保障信息安全无忧虑!

BeeWorks

用户案例|Shopee 在多媒体理解业务的向量检索系统实践

Zilliz

非结构化数据 Milvus Shopee Zilliz 向量数据库

最佳实践:TiDB 业务写变慢分析处理

PingCAP

数据库 最佳实践 TiDB

Puppeteer无头浏览器:开启自动化之门,掌握浏览器世界的无限可能

凌览

node.js puppeteer 截图

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