Kotlin开发四 kotlin中的高阶函数

1 高阶函数定义

在kotlin中任何以lambda或者函数引用为参数的函数,或者函数的返回值是lambda或者函数引用,就是高阶函数
高阶函数之前我们已经见过了,例如集合的map,filter等函数都是高阶函数,我们可以打开看下map的定义

public inline fun <T, R> Iterable<T>.map(transform: (T) -> R): List<R> {
    return mapTo(ArrayList<R>(collectionSizeOrDefault(10)), transform)
}

注意看transform的类型,它是(T) -> R,它其实就是一个函数。下面先来介绍函数的类型

2 函数类型

在kotlin中,函数都是有类型的。例如如下这个函数

fun sum(x:Int,y:Int):Int{
    return x+y
}

它的类型就是{(Int,Int) -> Int},注意和lambda表达式的类型很像,只是多了一对括号。
因此学习高阶函数,我们首先要弄明白函数的类型
高阶函数一般有两种,一种是函数参数是lambda或者函数引用,另外一种就是函数的返回值是lambda或者函数

3 参数是lambda的高阶函数

下面就是一个函数参数是lambda的高阶函数

fun main(args: Array<String>) {
    //传递lambda表达式
    highFunction1{
        a,b -> a+b
    }
    highFunction1{
        a,b -> a*b
    }
    //直接传递函数
    highFunction1(::multiply)
}

/**
 * 操作两个数
 */
fun highFunction1(operation:(Int,Int)->Int){
    val result = operation(20,30)
    println("result: $result")
}

/**
 * 两个数相加
 */
fun sum(x:Int,y:Int):Int{
    return x+y
}

/**
 * 两个数相乘
 */
fun multiply(x:Int,y:Int):Int{
    return x * y
}

可以看到,高阶函数可以直接传递lambda或者直接传递函数的引用

4 返回值是函数的高阶函数

接下来介绍函数返回值是函数的高阶函数,来看下面的例子

/**
 * 定义一个返回值是函数的高阶函数
 * @param name 入场
 * @return 返回一个函数或者lambda
 */
fun highFunction2(name:String):(Int) -> Int{
    if (name == "A"){
        return ::returnFun
    }
    //返回lambda
    return {a -> a + 10}
}

/**
 * 作为高阶函数的返回函数
 */
fun returnFun(a:Int):Int{
    return  a * 100
}

使用如下:

//使用高阶函数
val res = highFunction2("A")
println(res(20)) //打印2000
val res2 = highFunction2("B")
println(res2(20)) //打印30

总结:如果是参数是函数类型的高阶函数,可以传函数的引用和lambda,如果是返回值是函数类型的高阶函数,一般先接受高阶函数的返回,再继续调用。kotlin中lambda的地位和函数相当

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值