LESSON 08

高阶函数与 Lambda

把“怎么做”当作参数传进去

概念 · 示例 · 练习 · 小测
预计 10 分钟可在 Playground 练习

先用人话理解

Lambda 是可以放进变量、传给函数的代码片段。高阶函数则是接收函数,或返回函数的函数。它们让筛选、排序、转换列表更简洁。

本课要点:Lambda 写在花括号里;只有一个参数时常用 it。filter 负责筛选,map 负责逐项转换。

代码例子

先读注释,再关注每一行如何把数据变成结果。

KOTLIN · 可独立运行
fun calculate(price: Int, action: (Int) -> Int): Int = action(price) // 接收一个操作并把价格交给它处理

fun main() {
    val prices = listOf(12, 35, 8, 49) // 一组商品价格
    val affordable = prices.filter { price -> price < 30 } // 只保留小于 30 的价格
    val doubled = affordable.map { it * 2 } // 把筛选结果乘以 2
    println(doubled) // [24, 16]

    val result = calculate(20) { it + 5 } // Lambda:价格加 5
    println(result) // 25
}

再看一个用法

KOTLIN · 可独立运行
fun main() {
    val names = listOf("小米", "苹果", "梨")
    val longNames = names.filter { it.length >= 2 } // 尝试改为只保留长度大于 2 的名称
    println(longNames)
}

动手改一改

val names = listOf("小米", "苹果", "梨") val longNames = names.filter { it.length >= 2 } // 改成筛选长度至少为 2 的名称 println(longNames)

去 Kotlin Playground 动手 ↗

提示:Android 专属示例需要 Android Studio 项目和对应依赖;普通 Kotlin 示例可在 Playground 中尝试。

三道小测

先自己选择,再展开答案。答错也没关系,重要的是知道为什么。

1. filter 的作用是什么?

查看答案与解析

正确答案:B。抓住题目中的核心概念,重新对照示例理解。

2. 只有一个参数的 Lambda 可以用什么简写?

查看答案与解析

正确答案:A。回到概念和代码示例,再解释一次为什么。

3. 高阶函数的特征是什么?

查看答案与解析

正确答案:B。抓住题目中的核心概念,重新对照示例理解。

深入阅读

想继续往下挖,可以阅读 Kotlin / Android 官方文档。

打开官方文档 ↗

标记学习进度

进度保存在当前浏览器的 localStorage 中。