Kotlin的作用域函数 let、also、with、run、apply
程序员文章站
2022-05-29 13:36:23
...
作用域函数主要有下面这几种,这些函数非常类似,它们的主要区别就是函数体内使用对象和返回值的区别。他们在开发中的使用场景主要有两个,一是非空判断,二是对象的初始化或者本身及方法的频繁调用。
先介绍下lambda表达式
lambda表达式实际上有两种形式,一种是基本形式,还有一种是带接收者的形式,两种lambda表达式如下所示:
普通lambda表达式:{ () -> R } , 即函数无入参,返回值为R类型。
带接收者的lambda表达式:{ T.() -> R } 即申明一个T类型的接收者对象,且无入参,返回值为R类型。
Kotlin中的拓展函数,实际上就是使用的带接收者的lambda表达式,
带接收者的lambda与普通的lambda的区别主要在于this的指向区别,T.() -> R里的this代表的是T的自身实例,而() -> R里,this代表的是外部类的实例。
let函数
使用方法
// 作用1:使用it替代object对象去访问其公有的属性 & 方法
object.let{
it.todo()
}
// 作用2:判断object为null的操作
object?.let{//表示object不为null的条件下,才会去执行let函数体
it.todo()
}
// 注:返回值 = 最后一行 / return的表达式
使用示例
// 使用Java
if(mList!=null){
mList.add("A")
mList.add("B")
mList.add("C")
}
// 使用kotlin(无使用let函数)
mList?.add("A")
mList?.add("B")
mList?.add("C")
// 使用kotlin(使用let函数)
// 方便了统一判空的处理 & 确定了mVar变量的作用域
mList?.let {
it.add("A")
it.add("B")
it.add("C")
}
with函数
使用方法
with(object){
// ...
}
// 返回值 = 函数块的最后一行 / return表达式
使用示例
// 此处要调用people的name 和 age属性
// kotlin
val list = ArrayList<String>()
with(list){
add("A")
add("B")
add("C")
}
apply函数
使用方法
//java
val list = ArrayList<String>()
list.add("A")
list.add("B")
list.add("C")
//kotlin
val list = ArrayList<String>()
list.apply{
add("A")
add("B")
add("C")
}
run函数
使用方法
object.run{
// ...
}
// 返回值 = 函数块的最后一行 / return表达式
使用示例
// kotlin
val list = ArrayList<String>()
list.run{
add("A")
add("B")
add("C")
}
also函数
使用示例
/ let函数
var result = list.let {
it.add("A")
it.add("B")
it.add("C")
3
}
// 最终结果 = 返回3给变量result
// also函数
val list = ArrayList<String>()
var result =list.also{
it.add("A")
it.add("B")
it.add("C")
3
}
// 最终结果 = 返回一个list对象给变量result
上一篇: 第二天
下一篇: Callable和Future
推荐阅读