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