最近开始自学 Kotlin 了,作为一门简介的语言,我们不仅仅要从语法上开始学习,更应该学会利用其他方式把它的优势发挥到极致,所以首先让我们先了解一下 Lambda 表达式吧。
什么是 Lambda 表达式
Lambda 就是一个匿名函数,而函数其实就是功能( function ),匿名函数,就是匿名的功能代码。具体写法如下:
{ [ 参数列表 ] -> [ 函数体,最后一行是返回值 ] }
比如:
val sum = { a:Int , b: Int -> a + b }
例子中可以看出我们先定义了一个 sum 常量,赋值为一个 Lambda 表达式,它是先用一对大括号括起来,先写下参数名称和参数类型,接着写下「->」,最后写函数体,函数体最后一行的结果就是返回值。
Lambda 的类型表示举例
-
()-> Unit
- 无参,返回值为 Unit
-
(Int) -> Int
- 传入整型,返回一个整形
-
(String,(String -> String))-> Boolean
- 传入字符串和 Lambda 表达式,返回 Boolean 值
Lambda 表达式的调用
- 用 () 进行调用 ;
- 等价于 invoke() ;
val sum = {a: Int, b:Int -> a + b}
sum (,) // sum.invoke(3,4)
Lambda 表达式的简化
- 函数参数调用时最后一个 Lambda 可以移出去
list.forEach({ element -> println(element) })
//等价于
list.forEach() { element -> println(element) }
- 函数参数只有一个Lambda,调用时小括号可以省略
list.forEach() { element -> println(element) }
//等价于
list.forEach { element -> println(element) }
- Lambda只有一个参数可以默认为 it
list.forEach { element -> println(element) }
//等价于
list.forEach { println(it) }
- 入参,返回值和形参一致的函数可以用函数引用的方式作为实参传入
list.forEach { println(it) }
//等价于
list.forEach(::println)