Android经典面试题之Kotlin中常见作用域函数

2024-07-31 17:53:58 浏览数 (1)

Kotlin 中提供了一些内置的作用域函数(Scope Functions),它们通过改变代码块的上下文对象,使代码更加简洁和易读。主要的作用域函数有以下五个:letrunwithapplyalso。这些函数主要区别在于:传递给代码块的对象是作为参数还是接收者,以及它们的返回值是什么。以下是对每个作用域函数的详细说明:

1. let

  • 用法: let 函数常用于可以避免空指针异常(NullPointerException),即在对象为非空时执行特定代码块。
  • 上下文对象:通过参数 it 传递。
  • 返回值:返回代码块的执行结果。
代码语言:javascript复制
val name: String? = "Kotlin"
val result = name?.let {
    println("Name length: ${it.length}")
    it.length
}
println(result)  // 输出: Name length: 6
                 // 输出: 6

2. run

  • 用法: run 函数通常用于在对象的上下文中执行一段代码,并返回代码块的结果。
  • 上下文对象:通过接收者 this 传递。
  • 返回值:返回代码块的执行结果。
代码语言:javascript复制
val name = "Kotlin"
val result = name.run {
    println("Name length: $length")  // this指向name,所以可以直接访问length
    length
}
println(result)  // 输出: Name length: 6
                 // 输出: 6

3. with

  • 用法: with 函数不是一个扩展函数,而是一个普通的高阶函数。它在提供的一种对象上执行代码块,经常用于对同一个对象的多个属性进行操作。
  • 上下文对象:通过接收者 this 传递。
  • 返回值:返回代码块的执行结果。
代码语言:javascript复制
val name = "Kotlin"
val result = with(name) {
    println("Name length: $length")  // this指向name,所以可以直接访问length
    length
}
println(result)  // 输出: Name length: 6
                 // 输出: 6

4. apply

  • 用法: apply 函数通常用于配置对象。它在代码块内可以引用对象的所有公有成员,可以对对象进行初始化、属性设置等操作。
  • 上下文对象:通过接收者 this 传递。
  • 返回值:返回对象本身。
代码语言:javascript复制
val person = Person().apply {
    name = "Kotlin"
    age = 5
}
println(person)  // 输出: Person(name=Kotlin, age=5)

5. also

  • 用法: also 函数通常用于在链式调用中进行一些额外的操作,比如打印日志或者进行某些检查。
  • 上下文对象:通过参数 it 传递。
  • 返回值:返回对象本身。
代码语言:javascript复制
val name = "Kotlin"
val result = name.also {
    println("Name is $it")
}
println(result)  // 输出: Name is Kotlin
                 // 输出: Kotlin

总结

  • letalso:通过 it 作为参数传递上下文对象。
  • runwithapply:通过 this 作为接收者传递上下文对象。
  • letrunwith:返回代码块的结果。
  • applyalso:返回上下文对象自身。

根据需求选择合适的作用域函数,可以让你的代码更简洁和直观。

END

点亮【赞和在看】,让钱和爱都流向你。

心里种花,人生才不会荒芜,如果你也想一起成长,请点个关注吧。

0 人点赞