Lambda 与高阶函数
将行为作为值传递。
Lambda 与高阶函数 是 CoddyKit 上的免费 Android Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Android Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Android Academy 课程共包含 4 节课。
什么是 Lambda
Lambda 是一种可以直接写在代码中的小型函数,无需为它命名。
您可以将它放在花括号中:{ x -> x + 1 }。Lambda 让您能够像传递数据一样传递行为。
您已经在 map 和 filter 中使用过它们。
将 Lambda 存储在变量中
Lambda 是一种值,因此您可以将它存储在变量中,稍后再调用。
像调用函数一样使用括号调用它。
fun main() {
val square = { x: Int -> x * x }
println(square(5))
println(square(3))
}it 快捷方式
当 lambda 恰好接收一个参数时,您可以省略参数名并使用 it。
这样可以让简短的 lambda 更紧凑、更易读。
fun main() {
val nums = listOf(1, 2, 3, 4)
val big = nums.filter { it > 2 }
println(big)
}多个参数
Lambda 可以接收多个参数,这些参数要在箭头前用逗号分隔。
Lambda 中的最后一个表达式就是它的返回值。
fun main() {
val add = { a: Int, b: Int -> a + b }
println(add(4, 6))
}高阶函数
高阶函数是接收另一个函数作为参数,或返回一个函数的函数。
函数类型 (Int) -> Int 表示“接收一个 Int,返回一个 Int”。map 和 filter 的工作方式就是如此。
编写高阶函数
这里我们定义了 applyTwice,它接收一个函数并运行两次。
参数 op 的类型是 (Int) -> Int。
fun applyTwice(x: Int, op: (Int) -> Int): Int {
return op(op(x))
}
fun main() {
println(applyTwice(3) { it + 1 })
}尾随 Lambda 语法
当 lambda 是最后一个参数时,您可以将它移到括号外面。
这就是 list.filter { ... } 看起来如此简洁的原因。下面两种写法是等价的。
fun main() {
val nums = listOf(1, 2, 3)
println(nums.map({ it * 2 }))
println(nums.map { it * 2 })
}传递命名函数
当需要 lambda 的位置可以接收现有的命名函数时,您可以使用 :: 传递它,这称为函数引用。
这样可以避免将逻辑重新写成 lambda。
fun isOdd(n: Int) = n % 2 == 1
fun main() {
val nums = listOf(1, 2, 3, 4)
println(nums.filter(::isOdd))
}返回函数
高阶函数也可以返回一个函数。这里的 multiplier 会构建一个自定义的乘法 lambda。
这是一种简单的配置形式。
fun multiplier(factor: Int): (Int) -> Int {
return { it * factor }
}
fun main() {
val triple = multiplier(3)
println(triple(5))
}Lambda 捕获变量
Lambda 可以读取周围作用域中的变量。这称为闭包。
这里的 lambda 即使被传递到其他地方,也会记住 bonus。
fun main() {
val bonus = 10
val nums = listOf(1, 2, 3)
println(nums.map { it + bonus })
}Lambda 在 Android 中的重要性
在 Android 中,Lambda 可以简洁地表达回调。按钮点击监听器本质上就是传递给框架的一个 lambda。
例如:button.setOnClickListener { showMenu() } 会在点击时运行您的代码。
快速检查
测试您对 Lambda 和高阶函数的理解。
回顾
Lambda 是写在花括号中的无名内联函数,只有一个参数时可以使用 it。
高阶函数可以接收或返回函数,从而实现简洁的回调,以及 map 和 filter 这样的可复用操作。
常见问题解答
「Lambda 与高阶函数」课时是免费的吗?
是的 — 「Lambda 与高阶函数」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Android Academy 课程的其余内容,请升级到 CoddyKit PRO。 Android Academy 课程共包含 4 节课。
「Lambda 与高阶函数」这节课中我会学到什么?
将行为作为值传递。 你通过在浏览器中直接运行的动手代码来练习 Android Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Android Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Android Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「Lambda 与高阶函数」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Android Academy 课中编写并运行代码吗?
能。每节 Android Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 列表与可变列表
- 映射与集合
- map、filter、forEach
- Lambda 与高阶函数