写点什么

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

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

关注

评论

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

不要让基础技术设施成为稳定性瓶颈

老张

环境配置 基础架构 稳定性治理

震惊!AI开展数据治理将超过人工和数据平台?

奇点云

大数据 AI 数据治理 大模型

投诉问题处理系统(源码+文档+部署+讲解)

深圳亥时科技

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

本原智数

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

能让企业“网络隐身”的SPA,到底是什么黑科技?

芯盾时代

网关 零信任 SPA

开源建木荣获 GitCode年度十大开源社区荣誉

都广科技

#开源

使用SeaTunnel从InfluxDB同步数据到Doris

白鲸开源

Influxdb 数据同步 Apache SeaTunnel #开源

抖音集团也在用的数仓「降本」利器

字节跳动数据平台

大数据 数据仓库 实时数仓 抖音

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

本原智数

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

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

FinFish

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

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

吴脑的键客

人工智能

项目调度管理系统(源码+文档+部署+讲解)

深圳亥时科技

TableFill:一天搞定1000人的数据填报工作

袋鼠云数栈

CST如何实现空间分布变化的材料设置

思茂信息

教程 cst 电磁仿真

Playwright:掌握Web自动化测试的新利器

测吧(北京)科技有限公司

测试

DolphinScheduler集成Arthas实现接口调用监控,提升调度任务可靠性

白鲸开源

工作流调度 Apache DolphinScheduler Arthas #监控 API 接口

公开课 | Playwright:掌握Web自动化测试的新利器

测试人

软件测试 playwright

大众点评诉百度,数据爬虫合法边界引关注

本原智数

人工智能 数据合规 本原智数 数据爬虫

适合才最美:Shiro安全框架使用心得

威哥爱编程

Java javaWeb shiro JavaEE

信阳等保测评机构有哪些?电话多少?

行云管家

等保 等保测评 信阳

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