美文网首页Kotlin从入门到发疯
Kotlin笔记(七)Lambda表达式

Kotlin笔记(七)Lambda表达式

作者: 小龙哥的开发日记 | 来源:发表于2017-06-28 15:13 被阅读17次

    什么是Lambda表达式 ?

    答:匿名函数 (what?没错就是匿名函数)
    问:啥是匿名函数?
    答:看下面(^^!!!)

    表达式声明
    // {[参数列表] -> [函数体,最后一行是返回值]}
    // () -> Unit 无参返回值为Unit
    // (Int) -> Int 传入整型,返回一个整型

    我们先来看一个Kotlin里的函数

    //这是一个计算两数相加的函数(看不懂那就看一下我前面的文章)
    fun add(num1 : Int , num2 : Int):Int{
    
        return num1 + num2
    }
    

    第一种简化

    //匿名函数 = 后面只能跟一个表达式
    var num1 = fun (arg1 : Int,arg2 : Int) = arg1 + arg2
    
    var num2 = fun (arg1 : Int,arg2 : Int) =
            if(arg1 > 10){
                arg1 - arg2
            }else{
                arg1 + arg2
            }
    

    第二种简化

    //后面可以写一个表达式或者多个
    //把 )= 变成了 ->
    var sum3 =  {arg1 : Int , arg2 : Int ->arg1 + arg2}
    
    //注意最后一行是返回值
    var sum4 =  {arg1 : Int , arg2 : Int ->
        print("-----11111111111")
        arg1 + arg2
    }
    

    或者

    //这种写法是没有返回值的情况
    var printHello = {
        print("Hello")
        print("bbbb")
    }
    

    或者

    //suma是名称(Int,Int) -> Int先把类型和返回类型声明出来
    val suma : (Int,Int) -> Int = {x,y -> x+y}
    

    再看一个关于数组的遍历

     //声明一个数组
     var intArray : Array<Int> = arrayOf(1,2,3,4,5)
     //遍历数组方式一
     intArray.forEach { elempent -> print(elempent) }
     //遍历数组方式二
     intArray.forEach { print(it) }
    
    • 我们先看第一种遍历方式:我们直接在参数里传了一个lambda表达式,我们来看一下forEach方法原码
    //大家看参数是一个lambda类型
    public inline fun <T> Array<out T>.forEach(action: (T) -> Unit): Unit {
        for (element in this) action(element)
    }
    

    我们再来看遍历方式二

    it:单个参数的隐式名称

    如果函数字面值只有一个参数, 那么它的声明可以省略(连同 ->),其名称是 it。

    intArray.forEach { print(it) }
    

    这些约定可以写LINQ-风格的代码:

    intArray.forEach { ele -> print(ele) }
    //省略了 ele -> 因为只有一个参数
    ntArray.forEach  { print(it) }
    

    相关文章

      网友评论

        本文标题:Kotlin笔记(七)Lambda表达式

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