0Pricing
Kotlin Academy · 课时

将 Lambda 传递给函数

将 Lambda 作为参数传递,并使用尾随 Lambda 语法。

将 Lambda 传递给函数 是 CoddyKit 上的免费 Kotlin Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Kotlin Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Kotlin Academy 课程共包含 4 节课。

接受匿名函数的函数

高阶函数是指将函数(例如匿名函数)作为参数的函数。map、filter 和 forEach 都是通过这种方式工作的。

声明高阶函数

请使用函数类型作为参数类型。
fun applyTwice(n: Int, op: (Int) -> Int): Int {
    return op(op(n))
}
println(applyTwice(3, { it * 2 }))  // 12

尾随匿名函数语法

如果最后一个参数是函数,您可以将匿名函数移到括号外。这就是“尾随匿名函数”语法。
fun applyTwice(n: Int, op: (Int) -> Int) = op(op(n))

// Standard:
applyTwice(3, { it * 2 })
// Trailing lambda:
applyTwice(3) { it * 2 }

不带括号的尾随匿名函数

当匿名函数是唯一参数时,您可以完全省略括号。
fun execute(block: () -> Unit) = block()

// With parens:
execute({ println("Hello") })
// Without parens (idiomatic):
execute { println("Hello") }

传递匿名函数变量

您可以使用变量名传递已存储的匿名函数引用。
val double = { n: Int -> n * 2 }
fun applyTwice(n: Int, op: (Int) -> Int) = op(op(n))
println(applyTwice(5, double))  // 20

使用 :: 的函数引用

使用 :: 将命名函数作为兼容匿名函数的参数传递。
fun triple(n: Int) = n * 3
fun applyTwice(n: Int, op: (Int) -> Int) = op(op(n))
println(applyTwice(2, ::triple))  // 18

多个 Lambda 参数

函数可以接受多个 Lambda 参数。只有最后一个参数可以使用尾随 Lambda 语法。
fun transform(
    value: Int,
    before: (Int) -> Int,
    after: (Int) -> Int
) = after(before(value))

println(transform(5, { it * 2 }, { it + 1 }))  // 11

向筛选函数传递 Lambda

filter 接受一个谓词 Lambda,即一个将元素映射为布尔值的函数。
val numbers = listOf(1, 2, 3, 4, 5, 6)
val evens = numbers.filter { it % 2 == 0 }
println(evens)  // [2, 4, 6]

链式调用高阶函数

将多个高阶函数调用链接起来,构建表达力强的数据处理流水线。
val result = (1..10)
    .filter { it % 2 != 0 }  // odds
    .map { it * it }          // square
    .take(3)                  // first 3
println(result)  // [1, 9, 25]

Lambda 捕获变量

Lambda 可以捕获周围作用域中的变量(闭包)。在 Kotlin 中,Lambda 甚至可以捕获并修改 var。
var total = 0
listOf(1, 2, 3, 4).forEach { total += it }
println(total)  // 10

从函数返回 Lambda

高阶函数也可以返回 Lambda,从而创建工厂函数。
fun multiplierOf(factor: Int): (Int) -> Int {
    return { n -> n * factor }
}
val double = multiplierOf(2)
val triple = multiplierOf(3)
println(double(5))  // 10
println(triple(5))  // 15

快速检查

什么时候可以使用尾随 Lambda 语法,将 Lambda 移到括号外?

回顾

高阶函数将 Lambda 作为参数。Lambda 是最后一个参数时,尾随 Lambda 语法会将其移到括号外。:: 用于传递具名函数引用。下一步:隐式的 it 参数!

常见问题解答

「将 Lambda 传递给函数」课时是免费的吗?

是的 — 「将 Lambda 传递给函数」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Kotlin Academy 课程的其余内容,请升级到 CoddyKit PRO。 Kotlin Academy 课程共包含 4 节课。

「将 Lambda 传递给函数」这节课中我会学到什么?

将 Lambda 作为参数传递,并使用尾随 Lambda 语法。 你通过在浏览器中直接运行的动手代码来练习 Kotlin Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Kotlin Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Kotlin Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「将 Lambda 传递给函数」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Kotlin Academy 课中编写并运行代码吗?

能。每节 Kotlin Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 什么是 Lambda?语法与类型
  2. 将 Lambda 传递给函数
  3. it:隐式参数
  4. 集合中的 filter、map 与 find
← 返回 Kotlin Academy