回调函数
end block
before block
高阶函数
end block
这看不出啥区别,当需求发生变化,我想在回调方法中加个String
类型的参数,该如何实现呢?
1.2 带参示例
// 定义接口
interface Consumer {
fun accept(way: String)
}
fun main() {
pay(Consumer {
println(“回调函数…it=$it”)
})
pay{
println(“高阶函数…it=$it”)
}
}
fun pay(block: Consumer) {
println(“before block”)
block.accept(“支付宝”)
println(“end block”)
}
// String 指的是方法参数
fun pay(block: (String) -> Unit) {
println(“before block”)
block(“支付宝”)
println(“end block”)
}
// Int 指的是block函数的返回值
fun pay2(block: (String) -> Int) {
println(“before block”)
block(“支付宝”)
println(“end block”)
}
-
如果是以回调的形式,得先创建一个接口,定义参数,如果后面参数变成2个,又得新建1个接口。
-
而
kt的高阶函数
用起来更加灵活。
二 🌵内联函数
========
2.1 介绍
-
定义:方法名前面 加个
inline
就是内联函数 -
作用:减少函数的调用来优化性能
-
使用场景:并不是每个函数前加一个 inline 就可以优化性能,如果某个方法的参数包含
高阶函数
,那建议加上inline。典型的一个应用场景就是Kotlin的集合类。
filter
和 map
方法里的参数都是高阶函数,所以这2个方法加上 inline
关键字后,调用这2个方法时,会减少嵌套, 优化性能,见下面示例。
2.2 非内联函数</