Kotlin标准函数:let、with、run、apply和al

2021-11-07  本文已影响0人  金大王

Kotlin的标准函数指的是Standard.kt文件中定义的函数,任何Kotlin代码都可以自由地调用所有标准函数。

1. let函数

1.1 简介

1.2 示例代码

//作用1:使用it替代object对象去访问其公有的属性 & 方法
object.let{
    it.todo()
}

//作用2:配合?.操作符检查object空指针
//?.操作符表示object为空时什么都不做,object不为空时就调用let函数
object?.let{
  it.todo()
}

//注:返回值是let函数里面最后一行,或者指定return
//函数中表示对象本身使用的是it关键字

2. with函数

2.1 简介

2.2 示例代码

val result = StringBuilder()
result.append("apple")
result.append("banner")
for(letter in 'A'..'Z'){
  result.append(letter)
}
println(result.toString())

//改为通过with函数来构建的话代码就会简洁许多
val result = with (StringBuilder()) {
    append("apple")
  append("banner")
  for(letter in 'A'..'Z'){
    append(letter)
    }
  toString()        //with函数的返回值
}
println(result)

//注:返回值是with函数里面最后一行,或者指定return
//函数中表示对象本身使用的是this关键字

在这个例子中两个参数就是StringBuilder()和一个Lambda函数块,这里利用了把Lambda函数块放在括号外的约定。

3. run函数

3.1 简介

3.2 示例代码

val result = StringBuilder()
result.append("apple")
result.append("banner")
for(letter in 'A'..'Z'){
  result.append(letter)
}
println(result.toString())

//只是将调用with函数并传入StringBuilder()对象改成了调用StringBuilder()对象的run方法
val result = StringBuilder().run{
  append("apple")
  append("banner")
  for(letter in 'A'..'Z'){
    append(letter)
    }
  toString()        //run函数的返回值
}
println(result)

//注:返回值是run函数里面最后一行,或者指定return
//函数中表示对象本身使用的是this关键字

4. apply函数

4.1 简介

apply 函数和 run 函数也是极其类似的,都要在某个对象上调用,并且只接收一个 Lambda 参数。也会在 Lambda 函数块中提供调用对象的上下文,但是 apply 函数无法指定返回值,而是会自动返国调用对象本身。

4.2 示例代码

val result = StringBuilder().apply{
  append("apple")
  append("banner")
  for(letter in 'A'..'Z'){
    append(letter)
    }
}                   
println(result.toString())//最终返回一个StringBuilder()对象,得调用它的toString()方法才能打印

//注:返回值是object对象的本身
//函数中表示对象本身使用的是this关键字

5. also函数

5.1 简介

also函数和let函数很像,在Lambda函数块内通过 it 指代该对象。不同点就是let函数最后的返回值是最后一行的返回值而also函数的返回值是返回当前的这个对象(这一点和apply函数很像)。

5.2 示例代码

val result = StringBuilder().also{
  it.append("apple")
  it.append("banner")
  for(letter in 'A'..'Z'){
    it.append(letter)
    }
}                   
println(result.toString())//最终返回一个StringBuilder()对象,得调用它的toString()方法才能打印

//注:返回值是object对象的本身
//函数中表示对象本身使用的是it关键字

参考

  1. Kotlin系列之let、with、run、apply、also函数的使用
  2. Kotlin:巧用内置函数let、also、with、run、apply大大提高开发效率!
  3. 一文彻底搞懂Kotlin inline
  4. 《第一行代码 Android 第3版》郭霖
上一篇下一篇

猜你喜欢

热点阅读