目录
摘要
函数字面值,函数参数,闭包与柯理化,方法扩展表达式,inline
高阶函数
概念
那些以函数作为参数或返回函数的函数被称为高阶函数。
函数字面值
Kotlin 中函数可以赋值给变量
两种写法
val sum = { x: Int, y: Int -> x + y }
val sum2: (Int, Int) -> Int = { x, y -> x + y }
函数作为参数
格式
(函数参数) => 返回值类型
fun add(f: (Int) -> Int) = f(10)
val x = add({ Int -> 2 })
println(x) //2
以上 add 函数接收另一个函数作为参数,并在函数体内调用此函数,所以 add 函数即为高阶函数。
闭包与柯理化
- 闭包指由代码和非局部变量的自由变量组成的代码块
- 柯理化指接收参数产生新的函数的函数,所以柯理化函数也是高阶函数
var sum3 = 0
val ints = intArrayOf(1, 2, 3)
ints filter { it > 0 } forEach {
sum3 += it
}
print(sum3)
方法扩展表达式
val sum4 = fun Int.(other: Int): Int = this + other
1.sum4(2)
1 sum4 2
inline 注解
每个方法实际都是一个包含 Lambda 表达式的对象,inline 注解可以将每个 Lambda 表达式进行内联以提高性能,noinline 则相反。
inline fun inlineLock<T>(lock: Lock, body: () -> T, @noinline notInlined: () -> T): T {
lock.lock()
try {
return body()
} finally {
lock.unlock()
}
}