1.什么是高阶函数
Kotlin中的高阶函数与数学中的高阶函数定义类似,在Kotlin中,高阶函数是将函数用作参数或返回值的函数。
通常情况下,函数类型的实例化都用通过lambda表达式来展现。
函数以类似 (A,B)->C 的结构声明,例如(Int) -> String
表示接受一个类型为Int的参数,并返回一个String的函数。
类似的有:(Int,Int)->Long , ()->Unit ,((Int, Int) -> Int)?
2.高阶函数的使用
2.1 函数作为参数
在andorid中,很多耗时操作都是在异步线程中处理(如网络请求),通常需要使用接口回调的方式拿到返回的数据,如果使用高阶函数,那么这个过程可以简化为:
fun getData(success:(d:Data)->Unit){
//获取数据
val data = Data()
//获取成功->data
success(data)
}
函数类型还可以携带一个特殊的接收者类型,此类型传给调用的接收者对象成为隐式的this。声明为:A.(B) -> C
举个例子:我们需要对TextView进行统一的设置文本,文字大小,颜色等属性,可以写一个TextView的扩展函数
fun TextView.apply(block : TextView.()->Unit){
block()
}
在使用的时候,不需要引用textview的对象:
textview.apply {
text = "Hello Kotlin"
textSize = 16f
gravity = Gravity.CENTER
}
2.2 函数作为返回值
定义一个返回下一个斐波那契数列的值的闭包:
private fun fibonacci():()->Long{
var first = 0L
var second = 1L
return fun():Long{
val result = second
second += first
first = second - first
return result
}
}
fun main(){
val nextFibonacc = fibonacci()
println(nextFibonacc())
println(nextFibonacc())
println(nextFibonacc())
println(nextFibonacc())
println(nextFibonacc())
println(nextFibonacc())
}
输出结果如下:
1
1
2
3
5
8
上述的例子其实是在函数内部又定了一个匿名的函数并返回。作为kotlin的“一等公民”,这个写法是允许的。
fun funcA(){
fun funcB(){
}
}
以上是Koltin中高阶函数的定义以及使用场景,合理的使用高阶函数和Lambda表达式可以很好地发挥函数式编程的优势。
更多安卓知识体系,请关注公众号: