美文网首页
Kotlin高阶函数

Kotlin高阶函数

作者: 雨来 | 来源:发表于2022-08-22 17:42 被阅读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

相关文章

网友评论

      本文标题:Kotlin高阶函数

      本文链接:https://www.haomeiwen.com/subject/gpiigrtx.html