将 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 反馈 — 无需本地设置。
此课程中的所有课时
- 什么是 Lambda?语法与类型
- 将 Lambda 传递给函数
- it:隐式参数
- 集合中的 filter、map 与 find