美文网首页
Kotlin高阶入门-lambda表达式

Kotlin高阶入门-lambda表达式

作者: 壹元伍角叁分 | 来源:发表于2021-08-03 21:43 被阅读0次

    lambda表达式

       var method01: (Int, Int) -> Unit
    //    method01() //无方法体,报错
    
        var method02: (Int, Int) -> Int
    //    method02() //无方法体,报错
    
        var method03: (Int, Int) -> Int = { a, b -> a + b }
        println("method03 =${method03(1, 2)}")
    
        /**
         * 同上面写法,:加()   等同    =加{}
         * :(形参类型)
         * ={具体详情}
         */
        var method04 = { a: Int, b: Int -> a + b }
        println("method04 =${method04(3, 4)}")
    
        /**
         * 返回值自动识别为double
         */
        var method05 = { a: Int, b: Int -> a.toDouble() + b.toDouble() }
        println("method05 =${method05(5, 6)}")
    
        var method06: (String, String) -> Unit = { a, b -> println("a=$a,b=$b") }
        method06("张三", "李四")
    
        var method07: (String) -> String = { a -> a }
        println("method07 ${method07("王五")}")
    
        /**
         * 一个参数,可以不写参数名,默认值是it
         */
        var method08: (String) -> String = { it }
        println("method08 ${method08("刘六")}")
    
        var method09: (Int) -> Unit = {
            when (it) {
                1 -> println("你是1啊")
                in 2..10 -> println("你是2-10啊啊")
                else -> println("你是其他数字")
            }
        }
        method09(10)
    
        var method10: (Int, Int, Int) -> Unit = { a, b, c ->
            println("method10=${a + b + c}")
        }
        method10(1, 2, 3)
    
        var method11 = { a: Char -> if (a == 'M') println("你是男") else println("你是女") }
        method11('M')
    
        var method12 = { a: Char -> if (a == 'M') "你是男" else "你是女" }
        println("method12=${method12('a')}")
    
        /**
         * 覆盖操作
         */
        var method13 = { a: Int -> println("传入的值是$a") }
        method13 = { println("哈哈哈,我覆盖了。。。$it") }
        method13(12)//调用的是下面的方法
    

    实例:最简单的高阶函数:

    /**
     * 无参数无返回值
     * loginMethod: () -> Unit
     * loginMethod是函数名,
     * ()代表无参
     * ->代表方法体
     * Unit代表无返回值
     */
    fun show(isLogin: Boolean, loginMethod: () -> Unit) {
        if (isLogin) {
            println("aaaaaaa 成功-----执行顺序1")
        } else {
            println("aaaaaaa 失败。。。。。")
        }
    }
    
    /**
     * 有参有返回值
     */
    fun show1(isLogin: Boolean, loginMethod: (Boolean) -> String) {
        if (isLogin) {
            println("bbbbbbb 成功-----执行顺序1")
            val loginMethod1 = loginMethod(true)
            println("bbbbbbb 成功 loginMethod1=$loginMethod1 执行顺序3")
        } else {
            println("bbbbbbb 失败。。。。。")
            val loginMethod1 = loginMethod(false)
            println("bbbbbbb 失败 loginMethod1=$loginMethod1")
        }
    }
    

    调用:

    show(true) {
        println("aaaaaaa 这是啥啊?执行顺序2")
    }
    
    show1(true) {
        println("bbbbbb 这是啥啊?$it 执行顺序2")
        "我是bbb的返回值"
    }
    

    相关文章

      网友评论

          本文标题:Kotlin高阶入门-lambda表达式

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