Z
ZHANK

高阶函数

函数作为参数/返回值、内联 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 }