欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Kotlin的作用域函数 let、also、with、run、apply

程序员文章站 2022-05-29 13:36:23
...

作用域函数主要有下面这几种,这些函数非常类似,它们的主要区别就是函数体内使用对象和返回值的区别。他们在开发中的使用场景主要有两个,一是非空判断,二是对象的初始化或者本身及方法的频繁调用。

Kotlin的作用域函数 let、also、with、run、apply

先介绍下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

参考资料https://juejin.im/entry/5e5321ef5188254935091e25

相关标签: kotlin

上一篇: 第二天

下一篇: Callable和Future