阅读更多

12顶
7踩

编程语言

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

2011-09-09 15:31 by 见习编辑 songshuang 评论(28) 有15820人浏览
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相关书籍,一般第一章都是简述...

  • Toxi / Oxy Pro 便携式气体检测仪参考手册 使用说明书

    Toxi Oxy Pro 便携式气体检测仪参考手册 使用说明书

  • 科傻模拟网优化操作-教程书

    官方的的说明书资料,部分视频说明在这里: https://www.bilibili.com/video/BV1Fz4y1d7rn/?spm_id_from=333.999.0.0&vd_source=13dc65dbb4ac9127d9af36e7b281220e

  • node-v8.14.0-x64.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

  • 2023商业银行数据资产体系白皮书,主要介绍了“三位一体”数据资产体系的构成与工作机制,以及商业银行数据资产体系建设实践

    2023商业银行数据资产体系白皮书 目录 第 1 章 数据资产化与数据要素市场化相辅相成,相互促进 第 2 章 数据资产化是企业数据治理向上演进的必经之路 第 3 章 数据资产体系发展概述 第 4 章 “三位一体”数据资产体系的构思 4.1“三位一体”数据资产体系的构成与工作机制 数据资产管理 数据资产运营 数据资产评价 数据资产体系工作机制 4.2“三位一体”数据资产体系的相互作用关系 4.3“三位一体”数据资产体系的构建 4.4“三位一体”数据资产体系的优势 第 5 章 商业银行数据资产体系建设实践 5.1商业银行开展数据资产体系建设的背景和目标 5.2商业银行数据资产体系建设的工作步骤 5.3上海银行数据资产体系建设实践的主要成果 第 6 章 数据要素流通市场赋能企业数据资产化 6.1全国多层次数据要素市场的建设 6.2上海数据交易所赋能企业数据资产化 6.3数据要素流通交易市场赋能企业数据资产化的展望 第 7 章 未来演进与展望

Global site tag (gtag.js) - Google Analytics