Kotlin高阶函数

定义

参数类型是一个函数 或返回值是一个函数的 函数称为高阶函数
参考:https://blog.csdn.net/mr_hmgo/article/details/118935302

应用1: 我们定义一个函数,根据调方不同的逻辑 返回 + - * /的结果
/**
 * 计算数值
 */
fun calculation(number1: Int, number2: Int, operation: (Int, Int) -> Int): Int {
    return operation(number1, number2)
}
使用 乘法
val result = calculation(30, 50) { number1, number2 ->
        //最后一行语句在上面定义的时候已经确定类型了所以不要toString 如果类型不匹配的话会报错 return 也不要加了
        number1 * number2
    }
使用 减法
val result = calculation(30, 50) { number1, number2 ->
        //最后一行语句在上面定义的时候已经确定类型了 return 也不要加了
        number1 - number2
    }
应用2 Android中回调
class PrepareDesc {

    //声明一个方法 当然可以当做当前类的变量嘛
    var successAction: (() -> Unit)? = null
    var failedAction: (() -> Unit)? = null


    fun invokeMethod(): Unit {
        prepareResource({
            successAction?.invoke()
        },{
            failedAction?.invoke()
        })
    }

    /**
     * 高阶函数回调用的用法
     */
    val isSuccess: Boolean = true

    private fun prepareResource(success: () -> Unit, failed: () -> Unit): Unit {
        if (isSuccess) {
            success.invoke()
        } else {
            failed.invoke()
        }
    }

}
使用
var prepareDesc = PrepareDesc()
    prepareDesc.successAction = {
        //在这里说明执行成功了
        "20" + "30"
    }
    prepareDesc.invokeMethod() //执行
image.png
image.png
image.png

在这里我们认为走了onSuccess方法

prepareDesc.successAction = {
        "20" + "30"
    }
不理解高阶函数可以这样想

为什么success 是从 1 到3的步骤 从里向外调用的呢 ?
首先我们把 执行1 的 success.invoke() success就看作是一个参数 在这里的时候 这个sucess 是通过 prepareResoure(success:()->Unit) 传过来的 方便调用 这个方法谁传
那也就到了 执行2

image.png

注意 执行2 里的 successAction?.invoke() 这个invoke 的意思就是执行 successAction的方法体

image.png

successAction 并没有方法体 这里我们把 successAction当作一个变量 使用一个变量 我们要调用其 get 方法

而这里就是其 get 方法的地方

image.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值