Kotlin高阶函数

2022-08-22  本文已影响0人  雨来

定义

参数类型是一个函数 或返回值是一个函数的 函数称为高阶函数
参考: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
上一篇 下一篇

猜你喜欢

热点阅读