高阶函数
函数作为参数/返回值、内联 inline、noinline/crossinline
高阶函数
高阶函数把函数作为参数或返回值——Kotlin 标准库大量使用这个模式。
学完本章你将: 掌握函数作为参数/返回值、inline 内联优化。
函数作为参数
kotlin
fun repeat(times: Int, action: (Int) -> Unit) {
for (i in 0 until times) {
action(i)
}
}
repeat(3) { index ->
println("第 $index 次")
}
函数作为返回值
kotlin
fun makeMultiplier(factor: Int): (Int) -> Int {
return { number -> number * factor }
}
val double = makeMultiplier(2)
val triple = makeMultiplier(3)
println(double(5)) // 10
println(triple(5)) // 15
inline 内联
kotlin
// 高阶函数有性能开销——inline 消除
inline fun measureTime(block: () -> Unit) {
val start = System.currentTimeMillis()
block()
val end = System.currentTimeMillis()
println("耗时: ${end - start}ms")
}
measureTime {
// 耗时操作
Thread.sleep(100)
}
标准库高阶函数
kotlin
listOf(1,2,3).forEach { println(it) }
listOf(1,2,3).map { it * 2 }
listOf(1,2,3,4).filter { it % 2 == 0 }
listOf(1,2,3,4,5).takeWhile { it < 4 }