版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_27948659/article/details/82707728
前言
本博客为本人学习笔记,如有不对的地方,劳请在评论区指出,望海涵
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中,函数是一种类型,所以我们可以把一个具体的函数当成对象。
既然函数是一个对象啦,我们想怎么玩这个对象就怎么玩。
比如:
- 把函数当成参数传递
- 把函数当成返回值传递出来
接下来我们看下 高级函数的调用
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)
// 默认调用List 的tostring 方法
println(oneList)
// 调用并定义 lambda 函数
var twoList = oneList.initList { it * 2 }
println(twoList)
打印结果‘
[1, 2, 3]
[2, 4, 6]
到这里 我对 lambda 和 高级函数的理解 已经总结完毕,如果有不足的地方,请观众老爷 积极评论。
扫描二维码关注公众号,回复:
3237073 查看本文章