Kotlin(二) 高级函数(函数作为形参,函数作为参数)

一、概述

在JS,C 等语言中函数式的编程是很常见的,函数作为参数传递,在目标函数中再调用。很灵活简洁的编程方式。
Java不能直接用函数作为形参,只能传递对象的引用,所以在需要回调函数时,往往传递的是接口的匿名实现。

二、高阶函数 示例

高阶函数:以另一个函数作为参数,或者返回值是函数 称为 高阶函数
需要补充一些lambda的语法糖
函数作为参数:回调函数的作用,类比接口
返回值是函数: 参考多态作用

2.1、不带参数的函数 作为形参

fun main(args: Array<String>) {

    //lambda 闭包写在函数体外部, 形参中的最后一个形参是函数参数  可以这么写
    action(2){
        println("函数 回调 -- 第1种传递写法")
    }

    //lambda 闭包作为形参
    action(1,{
        println("函数 回调 -- 第2种传递写法")
    })


    //一步步的 显示调用方式
    var method:()->Unit = {
        println("函数 回调 -- 第3种传递写法")
    }
    action(3, method)
}

/**
 * 函数作为 形参
 */
fun action(first:Int, callback:()->Unit){

    //调用
    callback()
}

2.2、带参数和返回值得函数 作为形参

fun main(args: Array<String>) {

    action(1){it-> //Lambda语法,回调参数在这里
        println("回调函数参数= : $it")

        true//Lambda语法,最后一行返回值就是闭包的返回值
    }
}

/**
 * 函数作为 形参
 */
fun action(first:Int, callback:(Int)->Boolean){

    //调用
    if(callback(1)){
        println("回调函数返回值 true")
    }else{
        println("回调函数返回值 false")
    }
}

2.3、高级函数 返回一个函数

函数作为返回值,没有函数作为参数,用的场景广。可以用在一些状态判断跟的子逻辑,有多态的作用。可以指向一些不同的逻辑

fun main(args: Array<String>) {

    var method: (Int, Int) -> Int
    method = action()
    println(method.invoke(1, 2))

    method = action2()
    println(method.invoke(1, 2))

}

/**
 * 函数作为 形参
 */
fun action(): (Int, Int) -> Int {

    //逻辑代码

    return { j, i ->
        j + i
    }
}

fun action2(): (Int, Int) -> Int {

    //逻辑代码
    return { j, i ->
        j - i
    }
}

猜你喜欢

转载自blog.csdn.net/lckj686/article/details/80588897