Kotlin中的Lambda表达式——函数类型常量(高阶函数基础)

Lambda表达式语法

  • Lambda表达式要用花括号包裹
  • 参数在-> 之前声明(参数可能省略)
  • 执行内容跟在 -> 之后(如果提供的话)

lambda在kotlin中函数类型常量

Lambda表达式在kotlin中的应用很广泛,lanbda作为函数类型常量使用,两种引用方式,第一种是显式,第二种隐式(隐藏了参数和返回值部分)

: (形参类型) -> 返回值类型 = {方法实现模块} 例如:var m03: (Int, Int) -> Int = { a, b -> a + b }

= {具体参数名&类型 -> 方法实现模块} 例如:var m04 = { a: Int, b: Int -> a + b }

其中方法必须有具体的实现才能正确调用函数,否则报错

几种写法举例,代码里注释都很清楚,手打多熟悉熟悉

fun main(args: Array<String>) {

    //() -> Unit 相当于java的一个空参函数,返回值也为空,方法名是m01()

    // 可以定义,但是不能调用
    //todo 因为没有具体实现
    var m01: () -> Unit
//    m01()// 调用报错

    var m02: (Int, Int) -> Int
//    m02(1,2)// 也不能调用,因为也没有具体实现


    // todo 定义包括两种方式, : (行参类型)  |||   = {具体参数名}

    var m03: (Int, Int) -> Int = { a, b -> a + b }
    println("m03 : ${m03(2, 3)}")

    // 与m03方法一样,只是写法不同,此种写法返回值没法定,会根据返回值自己确定
    var m04 = { a: Int, b: Int -> a + b }
    println("m04 : ${m04(2, 3)}")

    //  自动得到返回值是Unit,即没有返回值
    var m05 = { s1: String -> println("s1:$s1") }
    m05("ssss")

    // 返回值根据方法实现,得到返回值是double
    var m06 = { a1: Int, a2: Int -> a1 + a2.toDouble() }
    println("m06 : ${m06(1, 2)}")

    var m07: (Int) -> String = {
        when (it) {
            1 -> "是1"
            in 10..20 -> "10到20"
            else -> "是其他$it"

        }
    }
    println("m07 : ${m07(99)}")

    var m08: (String, String) -> Unit = { s1, s2 ->
        println("s1:$s1,s2:$s2")
    }
    m08("aaa", "bbb")

    var m09 = { println("这是一个无参无返回值的函数") }
    m09()

    var m10: (Char) -> Unit = {
        if (it == 'M') println("男的") else println("女的")
    }
    m10('W')

    // 既可以打印,又有返回值
    var m11: (String, Int) -> String = { name, age ->
        println("name :$name,age :$age")
        name + age
    }
    println("m11 : ${m11("www", 13)}")
}

打印得到结果:

m03 : 5
m04 : 5
s1:ssss
m06 : 3.0
m07 : 是其他99
s1:aaa,s2:bbb
这是一个无参无返回值的函数
女的
name : www , age : 13
m11 : www13

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值