阅读更多

12顶
7踩

编程语言

翻译新闻 Java 8决定采用跟C#一样的Lambda句法

2011-09-09 15:31 by 见习编辑 songshuang 评论(28) 有16069人浏览
Java 7 正式版已经发布,甲骨文和Java社区进程组织(JCP)的成员们开始考虑为这种编程语言的下一个版本Java SE 8添加新特性了。

经过对备选方案的筛选,JCP团队决定Java 8 将采用跟C#一样的Lambda句法,一些细节还在仔细考虑,涉及到方法引用的语法问题也还在讨论中。

选择这种语法的理由

  • 在主要方面权衡,Lambda都被评价为“相当不错”(尽管和其他语法一样有瑕疵),无论使用“小”的Lambda表达式(通常用作方法参数)或是使用“大”的Lambda表达式(多语句),均表现很突出。
  • 尽管进行了广泛探索,但是还没有发现比这更好的替代方案。因此,最好在与Java相似的两种语言(C#和Scala)中,选择好用的语法,而不是创造新语法。
不久将首先实现一个编译器。

C# 的语法:
   lambda = ArgList Arrow Body
   ArgList = Identifier
             | "(" Identifier [ "," Identifier ]* ")"
             | "(" Type Identifier [ "," Type Identifier ]* ")"
   Body = Expression
             | "{" [ Statement ";" ]+ "}"

使用lambda表达式这种语法的一个例子:
   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"); }


英文原文:http://mail.openjdk.java.net/pipermail/lambda-dev/2011-September/003936.html

12
7
评论 共 28 条 请登录后发表评论
28 楼 kidfruit 2016-09-30 18:18
runjia1987 写道
c# 也叫经典语言?就那点没分量的使用率?
hoarhoar 写道
Java最近的几个版本都受到c#的影响,也有模仿c#的功能,这很正常,好的语言特性就应该加入进来。
c#是一门经典语言,Java也是一门经典语言,希望二者最大化的模仿,这样,你会一门就等于会了另一门,对我们程序员来说太好了。



有语言偏见的一概是2b程序猿
27 楼 nicholasun 2013-08-23 14:05
runjia1987 写道
c# 也叫经典语言?就那点没分量的使用率?
hoarhoar 写道
Java最近的几个版本都受到c#的影响,也有模仿c#的功能,这很正常,好的语言特性就应该加入进来。
c#是一门经典语言,Java也是一门经典语言,希望二者最大化的模仿,这样,你会一门就等于会了另一门,对我们程序员来说太好了。


使用率和微软有关系 和语言没关系
26 楼 qiuboboy 2011-09-16 11:42
OpenMind 写道
java变化太慢了,很多特性都跟不上时代,想当年C#从java学了多少东西啊!现在师傅被徒弟超越了,师傅也不得不学习徒弟。

jcp吵架,当然没有c#那么轻松。
25 楼 qiuboboy 2011-09-16 11:41
int08h 写道
C#的lambda语法应该是最纯正的了,还记得高中学数学时的简化推导公式就是用=>这个符号的吗?这就是lambda了
从视觉上看,也很容易理解(至少个人以为比ruby的|x| do x + 1)容易理解
=>就是一个方向指示,x=>x+1就是从x变成x+1,或者说输入x,输出x+1

支持你的观点,万佛朝宗也许说的就是这个,思想都会集中到几个点上。
24 楼 songshuang 2011-09-16 11:40
17ZOUGUO 写道
JavaJavaJava


这彩色字体是在ITeye论坛里学的?
23 楼 qiuboboy 2011-09-16 11:39
lzy5710303 写道
java开始学C#了

学很正常嘛,现在重要的是思想,不是学不学的问题,敢问哪门语言没有学其他语言的有点??
22 楼 qiuboboy 2011-09-16 11:38
油炸大龙虾 写道
c#有Linq。比光有lambda好用很多,java学他干啥??不如早日关闭了,给groovy发展吧。

java拥有的是一个生态环境,groovy拥有什么?系统不只是要开发效率高,运行效率高也很重要,groovy的运行性能让人蛋疼。
21 楼 fkshl 2011-09-14 12:54
期待这一功能.
20 楼 17ZOUGUO 2011-09-13 09:38
JavaJavaJava
19 楼 b_l_east 2011-09-13 09:33
以后学java也得会C#

加了一个新特性,确丢了一个最重要的特性(简单、易学、易用)。
18 楼 GavinHwa 2011-09-13 00:07
我倒是希望你们不要这么抄袭好不好,要实现就实现jvm上跑C#,.NET上跑java(这个本身是支持的,只是由于sun所谓的版权政策)
17 楼 int08h 2011-09-12 21:36
csywashing 写道
snakealpha 写道
int08h 写道
C#的lambda语法应该是最纯正的了,还记得高中学数学时的简化推导公式就是用=>这个符号的吗?这就是lambda了
从视觉上看,也很容易理解(至少个人以为比ruby的|x| do x + 1)容易理解
=>就是一个方向指示,x=>x+1就是从x变成x+1,或者说输入x,输出x+1

说着玩玩别放心上咯:数学上表述lambda的符号不是=>而是|->,读作"映射到",这是最纯正的lambda。

=>是指针吧,在Lambda中=>就是个函数指针。

lambda本身是个函数指针,即=>左边的部分加右边的部分合起来作为一个整体才是函数指针,不好说=>本身是函数指针……一个运算符而已……
16 楼 jilen 2011-09-12 21:28
早在C#之前很多函数型语言都有很完美的lambda表达式支持了。如Lisp,Haskell,ML。C#和Java很多语法上的书写都是来自C语言,格式类似没什么可奇怪的
15 楼 chuqiang0910 2011-09-12 21:21
runjia1987 写道
c# 也叫经典语言?就那点没分量的使用率?
hoarhoar 写道
Java最近的几个版本都受到c#的影响,也有模仿c#的功能,这很正常,好的语言特性就应该加入进来。
c#是一门经典语言,Java也是一门经典语言,希望二者最大化的模仿,这样,你会一门就等于会了另一门,对我们程序员来说太好了。


还是忍不住骂你一句,二13
14 楼 runjia1987 2011-09-12 20:43
c# 也叫经典语言?就那点没分量的使用率?
hoarhoar 写道
Java最近的几个版本都受到c#的影响,也有模仿c#的功能,这很正常,好的语言特性就应该加入进来。
c#是一门经典语言,Java也是一门经典语言,希望二者最大化的模仿,这样,你会一门就等于会了另一门,对我们程序员来说太好了。

13 楼 csywashing 2011-09-12 19:35
snakealpha 写道
int08h 写道
C#的lambda语法应该是最纯正的了,还记得高中学数学时的简化推导公式就是用=>这个符号的吗?这就是lambda了
从视觉上看,也很容易理解(至少个人以为比ruby的|x| do x + 1)容易理解
=>就是一个方向指示,x=>x+1就是从x变成x+1,或者说输入x,输出x+1

说着玩玩别放心上咯:数学上表述lambda的符号不是=>而是|->,读作"映射到",这是最纯正的lambda。

=>是指针吧,在Lambda中=>就是个函数指针。
12 楼 OpenMind 2011-09-12 19:16
java变化太慢了,很多特性都跟不上时代,想当年C#从java学了多少东西啊!现在师傅被徒弟超越了,师傅也不得不学习徒弟。
11 楼 snakealpha 2011-09-11 22:15
int08h 写道
C#的lambda语法应该是最纯正的了,还记得高中学数学时的简化推导公式就是用=>这个符号的吗?这就是lambda了
从视觉上看,也很容易理解(至少个人以为比ruby的|x| do x + 1)容易理解
=>就是一个方向指示,x=>x+1就是从x变成x+1,或者说输入x,输出x+1

说着玩玩别放心上咯:数学上表述lambda的符号不是=>而是|->,读作"映射到",这是最纯正的lambda。
10 楼 hoarhoar 2011-09-11 19:22
Java最近的几个版本都受到c#的影响,也有模仿c#的功能,这很正常,好的语言特性就应该加入进来。
c#是一门经典语言,Java也是一门经典语言,希望二者最大化的模仿,这样,你会一门就等于会了另一门,对我们程序员来说太好了。
9 楼 int08h 2011-09-11 11:34
C#的lambda语法应该是最纯正的了,还记得高中学数学时的简化推导公式就是用=>这个符号的吗?这就是lambda了
从视觉上看,也很容易理解(至少个人以为比ruby的|x| do x + 1)容易理解
=>就是一个方向指示,x=>x+1就是从x变成x+1,或者说输入x,输出x+1

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 深入理解Java Lambda表达式,匿名函数,闭包

    对于Lambda表达式一直是知其然不知其所以然,为了搞清楚什么是Lambda表达式,以及Lambda表达式的用法和作用,本文应运而生当做学习笔记分享出来,欢迎指正交流。

  • 比较C#和Java

    但由于C#也被描述为一个C++和Java的混合体,并添加了一些新特性,引入了一些变化,因此C#和Java自然也有很多不一样的地方。 这个条目描述了二者总体上的相似性,并列举了二者的不同点。   目录 1语言 1.1对象...

  • 7.8 W 字总结!Java 8—Java 10 特性详解

    点击关注公众号,回复“1024”获取2TB学习资源!‍‍Java现在发布的版本很快,每年两个,但是真正会被大规模使用的是三年一个的TLS版本。‍‍每3年发布一个TLS,长期维护版本。意味着...

  • java lambda 高阶函数_匿名方法,Lambda表达式,高阶函数

    匿名方法c#2.0引入匿名方法,不必创建单独的方法,因此减少了所需的编码系统开销。 常用于将委托和匿名方法关联,例如1. 使用委托和方法关联:this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_...

  • c#与java的区别

    但由于C#也被描述为一个C++和Java的混合体,并添加了一些新特性,引入了一些变化,因此C#和Java自然也有很多不一样的地方。 这个条目描述了二者总体上的相似性,并列举了二者的不同点。 语言[编辑] ...

  • JAVA java学习(8)——————java和C/C++的关系和区别

    Java、c# 便就是面向对象编程中的的代表性语言。 Java和C/C++的关系和区别 C 语言 19 世纪 70 年代初问世,1978 年美国电话电报公司(AT&T)贝尔实验室正式发布C语言。 C++ 在 C 基础上,1983 年贝尔实验室推出了 ...

  • java_note8

    面向对象总结,字符串正则表达式, String类,文本块text block,java11字符串新特性方法,string api,将一个字符串数组进行分组输出,每组中的字符串都由相同的字符组成

  • Java学习DAY2

    但 Java 的句法更清晰、规模更小、更易学。Sun 公司曾对多种程序设计语言进行分析研究,取其精华去其糟粕,最终推出了 Java。Java 从根本上解决了 C++ 的固有缺陷,形成了新一代面向对象的程序设计语言。 Java 和 C/...

  • 比较C Sharp和Java

    但由于C#也被描述为一个C++和Java的混合体,并添加了一些新特性,引入了一些变化,因此C#和Java自然也有很多不一样的地方。 这个条目描述了二者总体上的相似性,并例举了二者的不同点。 语言 对象处理 ...

  • 【编程实践】编程语言之 Smalltalk

    Smalltalk对其它众多的程序设计语言的产生起到了极大的推动作用,主要有:C++,C#,Objective-C,Actor,Java和Ruby等。90年代的许多软件开发思想得利于Smalltalk,例如设计模式、敏捷编程和代码重构等。

  • lambda 匿名内部类_从内部投影Lambda。 布莱恩·格茨专访

    lambda 匿名内部类 正如InfoQ报道的那样 ,Oracle在今年四月宣布将备受期待的Java 8的发布推迟到2014年第一季度。 OracleJava平台组首席架构师Mark Reinhold在他的博客中说: “超越M6的最重要的工作与Lambda...

  • 情感分析的入门简介,从词法、句法分析开始,到基础模型及深度学习模型的介绍

    目前,业界比较流行的句法分析工具有如下几种: Stanford Parser Stanford Parser是Stanford NLP团队开发的通用句法分析器,它有Python、Java、C++和MATLAB四个版本的API接口。 下载地址:...

  • 与Brian Goetz聊Java的数据类

    \\\作为Oracle的Java语言架构师,Brian Goetz一直致力于Java编程语言在生产力和性能上的日臻完美。最近,Goetz撰文绍了数据类(data classes)这一可能整合到Java语言中的实验性理念。他的研究工作很好地证明了,...

  • MongoDB学习(翻译2)

    C#驱动之LINQ教程 介绍 本教程涵盖了1.8发布版本对linq查询的支持。 开始本教程之前,你应该至少阅读下C#驱动教程关于C#驱动的介绍 快速开始 首先,添加下面命名空间到您的程序中: using MongoDB.Driver.Linq; ...

  • C#3.0与.NET

    第一章 .NET之道本章的目的在于为本书其余部分建立起一个概念性的框架,由.NET之前各种技术的局限性和复杂性开始,然后综述了.NET和C#是如何试图简化这种状况的。 以前看过不少.NET相关书籍,一般第一章都是简述...

  • .NET5仓储管理系统:集成EFCore、Redis缓存、RabbitMQ等技术实现企业级应用

    内容概要:本文详细介绍了基于.NET5开发的一个仓储管理系统,涵盖了多个关键技术的应用。首先,在数据访问方面,使用了EF Core进行ORM操作,并引入了全局逻辑删除和多租户过滤等功能。其次,权限管理部分采用Policy机制实现动态按钮权限控制,权限数据存储于Redis中,确保高效响应。再次,消息队列方面,通过RabbitMQ实现库存变动后的异步通知,保障库存数据的一致性和可靠性。此外,系统还支持多租户模式,能够根据不同租户的需求灵活切换数据库连接。前端则选择了LayUI作为主要框架,配合WebSocket实现库存变化的实时推送。部署环节涉及Ocelot网关、Consul服务注册以及Docker容器化部署,确保系统的高可用性和扩展性。 适合人群:具有一定.NET开发经验的研发人员和技术爱好者。 使用场景及目标:适用于希望深入了解.NET5企业级应用开发的技术人员,尤其是对仓储管理系统感兴趣的人群。通过学习本文,读者可以掌握如何将多种现代技术集成到一个完整的解决方案中,从而提高开发效率和系统性能。 其他说明:文中提供了大量实际代码片段,帮助读者更好地理解和实践相关技术。同时,作者分享了许

  • 中国联通自智网络技术白皮书-云光和云网专线场景的技术特征与应用

    内容概要:本文档是中国联通发布的关于自智网络技术白皮书,详细介绍了云光和云网专线场景下的自智网络技术。主要内容涵盖行业洞察、中国联通专线自智网络概述、云光和云网专线自智网络的技术特征、分级标准及其关键技术,以及专线自智网络的分级测评和认证体系。文中强调了自智网络在提升网络智能化、自动化方面的关键作用,特别是在云光和云网专线场景的应用,旨在为行业客户提供高品质的专线服务,促进网络向融合化、智能化、绿色化发展。 适合人群:适用于通信行业的技术人员、研究人员、管理人员,尤其是关注自智网络技术及其应用的专业人士。 使用场景及目标:①帮助行业客户理解自智网络技术在云光和云网专线场景中的应用;②为运营商提供技术参考,提升网络智能化水平;③促进产业链上下游协同发展,推动自智网络的商业化应用。 其他说明:本文档不仅提供了详细的理论和技术解析,还结合了中国联通的实际案例,展示了自智网络在实际应用中的成效和发展前景。

  • 三菱Q系列PLC在液晶电视导光板加工中的应用:QD75MH总线伺服与自动化控制系统详解

    内容概要:本文详细介绍了三菱Q系列PLC在液晶电视导光板加工中的应用案例。主要内容涵盖Q系列PLC的使用、QD75MH定位模块和SSNET总线伺服的应用、伺服控制、触摸屏程序设计以及温控器的使用。文中不仅提供了详细的硬件配置和软件编程实例,还深入解析了各个组件的工作原理及其协同工作的机制。此外,文章还分享了一些实际操作中的经验和常见问题解决方案,如伺服控制中的加减速曲线优化、温控器的Modbus通讯调试、以及总线通讯中的丢包问题处理等。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对三菱Q系列PLC和伺服控制系统感兴趣的读者。 使用场景及目标:适用于液晶电视导光板加工生产线的设计、安装、调试和维护。目标是帮助技术人员理解和掌握三菱Q系列PLC及相关组件的应用,提升系统的稳定性和精度。 其他说明:文章通过具体的代码示例和实际操作经验,展示了如何利用三菱Q系列PLC实现高效、稳定的工业自动化控制。对于希望深入了解工业自动化控制技术和三菱PLC编程的读者来说,是一份非常有价值的参考资料。

  • (源码)基于Go语言的用户积分系统 PointSystem.zip

    # 基于Go语言的用户积分系统 PointSystem ## 项目简介 本项目是一个基于Go语言的用户积分系统,旨在实现常见的用户积分功能,包括积分的获取、扣除和查询等。该系统适用于各种需要用户积分的场景,如购物网站、社区论坛等。 ## 项目的主要特性和功能 1. 用户积分管理系统能够记录用户的积分变化,包括增加积分和减少积分。 2. 积分查询用户可以查询自己的总积分。 3. 积分明细查询用户可以查询自己的积分变化明细,包括积分增加和扣除的记录。 4. 日志记录系统能够记录操作日志,方便问题追踪和审计。 ## 安装使用步骤 1. 确保已安装Go语言环境,并设置好环境变量。 2. 下载项目的源代码文件,解压到本地目录。 3. 在项目根目录下,找到并打开文件 confconf.go,根据实际需求修改数据库连接配置信息(mysqlHost、mysqlUsername、mysqlPassword、mysqlDb 和 LogPath)。

Global site tag (gtag.js) - Google Analytics