浅谈kotlin的lambda表达式以及与匿名函数的区别

Posted by

php最新的7.2版本貌似还不支持lambda表达式,所以在学习kotlin的过程中,kotlin的lambda表达式引起了我很大的兴趣。kotlin的高阶函数,跟lambda表达式有异曲同工之妙。国内很多文章对lambda表达式的误解很深,认为不过是语法糖而已,这里谈谈我的看法。最后讲一下,lambda表达式和匿名函数的区别。

第一:kotlin的lambda表达式

一个 lambda 表达式或匿名函数是一个“函数字面值”,即一个未声明的函数, 但立即做为表达式传递。kotlin官方文档给了下面的例子:

max(strings, { a, b -> a.length < b.length })

函数 max 是一个高阶函数,换句话说它接受一个函数作为第二个参数。 其第二个参数是一个表达式,它本身是一个函数,即函数字面值。写成函数的话,它相当于:

fun compare(a: String, b: String): Boolean = a.length < b.length

有人认为lambda表达式仅仅是把一个函数简写了,看上去也确实如此。但是,lambda表达式绝对不仅仅是把函数简写了那么简单。

首先,lambda表达式是一个表达式,而不是函数。这件事情的意义是很大的,类里面减少了函数的数量,在读取和执行类的过程中都提高了性能。可以说lambda表达式是替代低阶函数的最佳选择,是程序员优化性能的必要手段之一,绝不仅仅是一个语法糖而已。

其次,大量运用lambda表达式替代简单的函数,减少了整个项目的方法数量。对于像android开发这样需要控制项目方法数量的场景,lambda表达式就意义非凡了。

第二:kotlin的lambda表达式和kotlin的匿名函数的区别

对于php程序员来说,当把lambda表达式用作函数的参数时,你会很容易联想到,这不就是php的匿名函数嘛,😄。实际上二者确实像,但是还是有一些区别的,需要特别注意下。kotlin官方文档对这个问题有非常好的描述,我就省力气了。

lambda 表达式语法缺少的一个东西是指定函数的返回类型的能力。在大多数情况下,这是不必要的。因为返回类型可以自动推断出来。然而,如果确实需要显式指定,可以使用另一种语法: 匿名函数 。

说简单一点,匿名函数可以指定返回类型。而kotlin可以自动推动返回类型,连返回类型都可以省了,确实厉害。

第三:kotlin的lambda表达式和php的匿名函数的区别

我认为kotlin的lambda表达式,比php的匿名函数要更厉害一些。主要是简化的更厉害了,kotlin的代码要比php的更简单更简洁,当然是熟练掌握之后。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.