第三部分:函数式编程与并发
第 10 章:高阶函数与 Lambda 表达式
10.1 Lambda 表达式的语法与使用
1. Lambda 表达式简介
Lambda 表达式是 Kotlin 中函数式编程的核心特性之一,它允许将函数作为参数传递或直接定义匿名函数。Lambda 表达式简洁且灵活,常用于简化代码逻辑。
2. 基本语法
Lambda 表达式的标准语法如下:
{ 参数列表 -> 函数体 }
- 参数列表:声明 Lambda 的输入参数,多个参数用逗号分隔。
- 函数体:Lambda 的具体实现逻辑,最后一行表达式的结果会自动作为返回值。
示例:
val sum = { a: Int, b: Int -> a + b }
println(sum(3, 5)) // 输出:8
3. Lambda 表达式的简化
Kotlin 提供了多种简化 Lambda 的语法:
- 单参数隐式名称:如果 Lambda 只有一个参数,可以省略参数声明,用
it代替。val square: (Int) -> Int = { it * it } println(square(4)) // 输出:16 - 函数调用末尾的 Lambda:如果 Lambda 是函数的最后一个参数,可以将其移到括号外。
listOf(1, 2, 3).forEach { println(it) }
4. Lambda 与高阶函数结合
Lambda 常用于高阶函数(如 map、filter)的参数中:
val numbers = listOf(1, 2, 3, 4)
val doubled = numbers.map { it * 2 } // [2, 4, 6, 8]
val evens = numbers.filter { it % 2 == 0 } // [2, 4]
5. Lambda 的类型
Lambda 的类型是函数类型(Function Type),例如:
() -> Unit:无参数、无返回值的 Lambda。(Int, String) -> Boolean:接受Int和String参数并返回Boolean的 Lambda。
示例:
val greet: () -> Unit = { println("Hello!") }
val isPositive: (Int) -> Boolean = { it > 0 }
6. 注意事项
- 返回值:Lambda 的返回值是函数体最后一行的表达式,无需显式写
return。 - 作用域:Lambda 可以访问外部作用域的变量(闭包特性)。
var count = 0 val increment = { count++ } increment() println(count) // 输出:1
7. 实战示例
// 使用 Lambda 实现自定义排序
val names = listOf("Alice", "Bob", "Charlie")
val sorted = names.sortedBy { it.length } // 按字符串长度排序
println(sorted) // 输出:[Bob, Alice, Charlie]
总结:
Lambda 表达式是 Kotlin 函数式编程的基石,通过简洁的语法实现灵活的代码逻辑。掌握其语法和常见用法,能够显著提升代码的可读性和功能性。
