前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java核心技术整理(七)---Lambda表达式

Java核心技术整理(七)---Lambda表达式

作者头像
葆宁
发布2022-01-13 14:00:29
2480
发布2022-01-13 14:00:29
举报
文章被收录于专栏:FREE SOLOFREE SOLO

1、lambda表达式

Java8新特征Lambda表达式,读作λ表达式,它实质属于函数式编程的概念,要理解函数式编程的产生目的,就要先理解匿名内部类。lambda写的好可以极大的减少代码冗余,同时可读性也好过冗长的内部类,匿名类。

Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。

Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。

使用 Lambda 表达式可以使代码变的更加简洁紧凑。

具体特征:

可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。

可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。

可选的大括号:如果主体包含了一个语句,就不需要使用大括号。

可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。

在这里插入图片描述
在这里插入图片描述

λ表达式本质上是一个匿名方法。让我们来看下面这个例子:

代码语言:javascript
复制
public int add(int x, int y) {
    return x + y;
}

转成λ表达式后是这个样子:

代码语言:javascript
复制
(int x, int y) -> x + y;

参数类型也可以省略,Java编译器会根据上下文推断出来:

代码语言:javascript
复制
(x, y) -> x + y; //返回两数之和

或者

代码语言:javascript
复制
(x, y) -> { return x + y; } //显式指明返回值

可见λ表达式有三部分组成:参数列表,箭头(->),以及一个表达式或语句块。

优点:

1、代码简洁,开发快速。

函数式编程大量使用函数,减少了代码的重复,因此程序比较短,开发速度较快。Paul Graham在《黑客与画家》一书中写道:同样功能的程序,极端情况下,Lisp代码的长度可能是C代码的二十分之一。如果程序员每天所写的代码行数基本相同,这就意味着,"C语言需要一年时间完成开发某个功能,Lisp语言只需要不到三星期。反过来说,如果某个新功能,Lisp语言完成开发需要三个月,C语言需要写五年。“当然,这样的对比故意夸大了差异,但是"在一个高度竞争的市场中,即使开发速度只相差两三倍,也足以使得你永远处在落后的位置。”

2 . 接近自然语言,易于理解

函数式编程的自由度很高,可以写出很接近自然语言的代码。以java为例把学生以性别分组:

没用labmda表达式:

在这里插入图片描述
在这里插入图片描述

用了lambda表达式:

在这里插入图片描述
在这里插入图片描述

3. 更方便的代码管理

函数式编程不依赖、也不会改变外界的状态,只要给定输入参数,返回的结果必定相同。因此,每一个函数都可以被看做独立单元,很有利于进行单元测试(unit testing)和除错(debugging),以及模块化组合。

4 . 易于"并发编程"

函数式编程不需要考虑"死锁"(deadlock),因为它不修改变量,所以根本不存在"锁"线程的问题。不必担心一个线程的数据,被另一个线程修改,所以可以很放心地把工作分摊到多个线程,部署"并发编程"(concurrency)。

5 . 代码的热升级

函数式编程没有副作用,只要保证接口不变,内部实现是外部无关的。所以,可以在运行状态下直接升级代码,不需要重启,也不需要停机。Erlang语言早就证明了这一点,它是瑞典爱立信公司为了管理电话系统而开发的,电话系统的升级当然是不能停机的。

缺点:

1、函数式编程常被认为严重耗费在CPU和存储器资源。

主因有二:

(1)早期的函数式编程语言实现时并无考虑过效率问题。

(2)有些非函数式编程语言为求提升速度,不提供自动边界检查或自动垃圾回收等功能。惰性求值亦为语言如Haskell增加了额外的管理工作。

2、语言学习曲线陡峭,难度高

函数式语言对开发者的要求比较高,学习曲线比较陡,而且很容易因为其灵活的语法控制不好程序的结构。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-12-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档