Kotlin 学习笔记 (九) 可怕的 lambda 及 高级函数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_27948659/article/details/82707728

前言
本博客为本人学习笔记,如有不对的地方,劳请在评论区指出,望海涵

Kotln 学习笔记(八)

1. lambda表达式

  说到lambda 简单的说,就是 匿名函数。我这里通过代码展现 不同的表达方法


// 比较常规易懂的 写法
fun  (a :Int , b : Int):Int{
        return a + b
    }

// 单句表达式 可以直接 用 = 省略 大括号
fun  (a :Int , b : Int):Int = a + b

// 智能类型
fun  (a :Int , b : Int) = a + b

// 原始版 Lambda 表达式
val lambda = {

    // 传入的类型 及 参数 

    a : Int , b : Int

    // -> 分割 输入和 输出

           ->

    // 结果输出

    a+b
}



// lambda 表达式。两种引用方法都对,其实本质一样的
println(lambda(2,3))
println(lambda.invoke(2,3))

  当然 大多数 匿名类 都是 一个参数的,我们这里暂时使用一个参数的 lambda 方程式进行 不断的 简单 展示。

// 声明
var sum : ((Int) -> Int)? = null

// 实现

// {参数 :参数类型 -> 返回值(具体逻辑)}
sum ={x : Int  -> x*2}

// 由于知道了出入类型 我们也可以省略 参数类型
sum ={x -> x*2}

// 由于我们使用的 一个参数,参数可以写为 it 
sum ={it*2}

// 该lambda 表达式错误的,其内 不能直接使用 return
sum ={
        it*2
        return
    }

// lambda 最后一个表达式就是 该表达式的返回值
sum ={
        println("$it")
        it*2
    }

1.1 lambda return

  前面我们说到 不能再 lambda 表达式中使用 return ,当然不是绝对,我们使用 return+label

// 声明一个没有返回值的
var demo : ((Int) -> Unit)? = null

demo = die@{
        it *2
        return@die
    }

2. 高级函数

  高级函数其实还是函数,只不过 方法的参数可以为函数,返回值也可以是函数。我们使用例子来看下 高级函数

// 函数第二个参数为 lambda函数

fun play(girl :String , shop : () ->Unit):Unit{
    println("the girl is $girl")

    fun todoSomething () :Unit{
        shop()
        println("todoSomething start")
    }

    // 返回值也可以为函数

    return todoSomething()

}

解释:
  在kotlin中,函数是一种类型,所以我们可以把一个具体的函数当成对象。
既然函数是一个对象啦,我们想怎么玩这个对象就怎么玩。
比如:

  1. 把函数当成参数传递
  2. 把函数当成返回值传递出来

接下来我们看下 高级函数的调用


fun shopImpl():Unit{
        println("hello world")
}

// 调用普通函数
play("gyy",:: shopImpl)

// 传入lambda 函数
play("gyy",{ println("hello world !")})

  通过上面的学习,我们写一个 扩展函数 并简单的运用下 高级函数


// 扩展函数 传入lambda 函数

fun List<Int>.initList(double: (Int) -> Int): List<Int> {
    var resultList  = arrayListOf<Int>()

    // 循环 将集合item 都带入lambda 函数中
    for(item in this){
        resultList.add(double(item))
    }
    return resultList
}


var oneList = arrayListOf<Int>(1,2,3)

// 默认调用Listtostring 方法
println(oneList)
// 调用并定义 lambda 函数
var twoList = oneList.initList { it * 2 }
println(twoList)

打印结果

[1, 2, 3]
[2, 4, 6]

  到这里 我对 lambda 和 高级函数的理解 已经总结完毕,如果有不足的地方,请观众老爷 积极评论。

扫描二维码关注公众号,回复: 3237073 查看本文章

Kotlin 学习笔记 (十)

猜你喜欢

转载自blog.csdn.net/qq_27948659/article/details/82707728
今日推荐