写点什么

Java 决定使用 C#及 Scala 的 Lambda 语法

  • 2011-09-10
  • 本文字数:853 字

    阅读完需:约 3 分钟

Java 8 里最重要的更新之一便是引入了 Lambda 语法,这样可以将匿名函数作为参数或变量。然而,这方面的语法始终未能确定下来,也曾经有过投票,咨询社区更适应哪种语法。

最近,lambda-dev 在邮件列表宣布,Java 的Lambda 语法决定基于C#语法。这种语法在C#语言里已经使用很长时间了(C#在1.0 时期便引入了委托类型,并在2.0 里支持匿名函数,3.0 对Lambda 表达式提供支持)。

从调查结果来看,其他一些语法选择(例如 BGGA )相对别的设计并没有表现出明显的优势。而在 C#和 Scala 中已经长时间使用的语法体验,意味着会有大量程序员已经熟悉此类语法了(C#和 Scala 的主要区别,在于匿名函数的参数如何标识其类型:C#使用“int foo”,而 Scala 使用“foo: int”——人们很容易适应这种细微区别。Java 会使用 C#的形式“int foo”,因为这已经是 Java 语言的表示方法了)。

我们进行了很广泛的探索,但是最终发现没有哪种选择是明显的赢家(每种形式都有好的方面和不那么好的方面,也没有哪种形式明显好过其他的)。因此,与重新发明一种新的语法相比,我们认为还是选择一种在两种和 Java 比较相似的语言里——C#和 Scala——已经得到证明的语法比较合适。

这种语法同时支持表达式和代码块。表示式的形式不需要大括号,并且在执行后返回结果。语法块的形式需要使用大括号,除非使用了 return 关键字,否则不会直接返回结果。邮件里也给出了示例:

复制代码
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"); }

Lambda 表达式的关键优势,在于它们会对参数进行类型推断。不过在某些情况下,编译器依然无法推断出正确类型(尤其是出现操作符重载的时候,例如:(x, y) => x + y 在 Java 编译器不知道 x 和 y 是 int 还是 double 时候)。一般来说,类型推断引擎都能自动得出正确的代码,如果需要更多提示,程序员也始终可以显示地增加类型信息。

不久的将来会发布支持新语法的编译器以供体验。

2011-09-10 05:464885
用户头像

发布了 157 篇内容, 共 61.4 次阅读, 收获喜欢 6 次。

关注

评论

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

十四五期间我国区块链技术趋势特征分析

CECBC

区块链 大数据

翻译:《实用的Python编程》01_06_Files

codists

人工智能 后端 python 爬虫 数据结构与算法 文件操作

如何提升网页核心指标

Vincent

linux内核协议栈 邻居协议之ARP协议处理初始化

赖猫

Linux 协议栈 Linux内核

最新Hadoop的面试题总结

大数据老哥

真牛皮!2021最新Android大厂面试真题大全,BAT大厂面试总结

欢喜学安卓

android 程序员 面试 移动开发

TCP 协议灵魂问题,巩固你的网路底层基础

元旦立下的Flag,春节后该如何实现?

脑极体

01 | Mysql基础架构

zach

MySQL

资本之外,区块链破圈正当时

CECBC

区块链

电信的标准化组织

Geek_古藤模根

标准化 电信

一、MongoDB简介

Kylin

数据库 mongodb 学习 七日更 二月春节不断更

温故而知新!腾讯Android开发面试记录,薪资翻倍

欢喜学安卓

android 程序员 面试 移动开发

【LeetCode】K 连续位的最小翻转次数Java题解

Albert

算法 LeetCode 2月春节不断更

如何读懂CNN、BBC、经济学人、卫报、纽约时报?看完这本经典即可事半功倍!

wbliu85

学习 英语

Elasticsearch Search API 基础语法

escray

elastic 七日更 死磕Elasticsearch 60天通过Elastic认证考试 2月春节不断更

腾讯云大神用这份“redis深度笔记”把Redis入门到精通全部精髓全部展现出来了

redis 架构 计算机

使用 Tye 辅助开发 k8s 应用竟如此简单(三)

newbe36524

Docker 微服务 k8s dotnet

区块链难在落地,亟需补人才缺口迎爬升期

CECBC

区块链

技术需求文档,应当这么写!

穿甲兵

需求 文档

GitHub上爆火的Java性能优化100+小技巧!(干货建议收藏)

Java架构师迁哥

百度Hydra工具在移动端UI兼容性测试上的高效应用

百度Geek说

测试 UI

6.render阶段(厉害了,我有创建Fiber的技能)

全栈潇晨

React React Hooks react源码

让虞书欣、李诞拍到停不下来!AR+AI双引擎的互动小游戏,如何打开IP新玩法?

爱奇艺技术产品团队

DPDK大页内存原理

赖猫

Linux DPDK

地表建筑物识别Dayo1

IT蜗壳-Tango

七日更 2月春节不断更

15. Python 程序运行速度如何提高十倍?第一遍滚雪球学 Python 收工

梦想橡皮擦

Python 2月春节不断更

诊所数字化:诊所医护人员绩效指标评估方式

boshi

绩效 数字化转型 医疗 七日更

5.state更新流程(setState里到底发生了什么)

全栈潇晨

React React Hooks react源码

前端学习总结,经验分享,项目经验分享过程

我是哪吒

学习 程序员 Vue 大前端 2月春节不断更

探究Python源码,终于弄懂了字符串驻留技术

华为云开发者联盟

Python 字符串 Python解释器 字符串驻留 字符

Java决定使用C#及Scala的Lambda语法_Java_Alex Blewitt_InfoQ精选文章