首先申明下,本文为笔者学习《Kotlin 程序开发入门精要》的笔记,并加入笔者自己的理解和归纳总结。
Lambda表达式,也可称为匿名函数。以箭头操作符->
将表达式拆分成两部分。
简单语法
// 没有参数
var f1 = { -> println("in f1")}
// 一个参数
var f2 = { x: Int -> println("in f2 x = $x")}
// 多个参数,最后一个表达式可以作为返回值
var f3 = { x: Int, y: Int -> x + y}
// 指定函数类型
var f4: (Int, Int, Int) -> Int = { x, y, z -> x + y + z}
// 只有一个参数时,可以省略声明,使用参数名it
var f5: (Int) -> Int = { it + 4 }
fun main(args: Array<String>) {
f1() // in f1
f2(3) // in f2 x = 3
println(f3(3, 4)) // 7
println(f4(3, 4, 5)) // 12
println(f5(6)) // 10
}
Lambda表达式可以用作参数使用
fun <T> max(list : List<T>, greaterThan: (T, T) -> Boolean): T? {
var value: T? = null
for (item in list) {
if (value == null || greaterThan(item, value) ) {
value = item
}
}
return value
}
fun main(args: Array<String>) {
var list = listOf(5, 9, 13, 51, 31, 69, 12, 48)
var max = max(list, {x, y -> x > y})
println(max) // 69
}
如果Lambda表达式是最后一个参数,可以把大括号挪到外面
fun main(args: Array<String>) {
var list = listOf(5, 9, 13, 51, 31, 69, 12, 48)
var max = max(list) {
x, y -> x > y
}
println(max) // 69
}