美文网首页
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