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

简介: **Kotlin作用域函数概览**: `let`, `run`, `with`, `apply`, `also`. `let`安全调用并返回结果; `run`在上下文中执行代码并返回结果; `with`执行代码块,返回结果; `apply`配置对象后返回自身; `also`附加操作后返回自身

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点

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

1. let

  • 用法let 函数常用于可以避免空指针异常(NullPointerException),即在对象为非空时执行特定代码块。
  • 上下文对象:通过参数 it 传递。
  • 返回值:返回代码块的执行结果。
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 传递。
  • 返回值:返回代码块的执行结果。
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 传递。
  • 返回值:返回代码块的执行结果。
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 传递。
  • 返回值:返回对象本身。
val person = Person().apply {
    name = "Kotlin"
    age = 5
}
println(person)  // 输出: Person(name=Kotlin, age=5)

5. also

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

总结

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

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


欢迎关注我的公众号AntDream查看更多精彩文章!

目录
相关文章
|
3天前
|
安全 Kotlin
Kotlin教程笔记(23) -作用域函数
Kotlin教程笔记(23) -作用域函数
|
1月前
|
Android开发 Kotlin
Android经典面试题之Kotlin的==和===有什么区别?
本文介绍了 Kotlin 中 `==` 和 `===` 操作符的区别:`==` 用于比较值是否相等,而 `===` 用于检查对象身份。对于基本类型,两者行为相似;对于对象引用,`==` 比较值相等性,`===` 检查引用是否指向同一实例。此外,还列举了其他常用比较操作符及其应用场景。
177 93
|
2天前
|
Kotlin
Kotlin教程笔记(21) -高阶函数与函数引用
Kotlin教程笔记(21) -高阶函数与函数引用
11 5
Kotlin教程笔记(21) -高阶函数与函数引用
|
3天前
|
Kotlin
Kotlin教程笔记(21) -高阶函数与函数引用
Kotlin教程笔记(21) -高阶函数与函数引用
8 2
Kotlin教程笔记(21) -高阶函数与函数引用
|
4天前
|
IDE 开发工具 Kotlin
Kotlin - 函数与Lambda表达式
Kotlin - 函数与Lambda表达式
|
2天前
|
安全 Kotlin
Kotlin教程笔记(23) -作用域函数
Kotlin教程笔记(23) -作用域函数
10 4
|
6天前
|
IDE 开发工具 Kotlin
Kotlin教程笔记(6)- 函数与Lambda表达式
Kotlin教程笔记(6)- 函数与Lambda表达式
|
5天前
|
Android开发 Kotlin
Android面试题之Kotlin中如何实现串行和并行任务?
本文介绍了 Kotlin 中 `async` 和 `await` 在并发编程中的应用,包括并行与串行任务的处理方法。并通过示例代码展示了如何启动并收集异步任务的结果。
7 0
|
5天前
|
Java 调度 Android开发
Android面试题之Kotlin中async 和 await实现并发的原理和面试总结
本文首发于公众号“AntDream”,详细解析了Kotlin协程中`async`与`await`的原理及其非阻塞特性,并提供了相关面试题及答案。协程作为轻量级线程,由Kotlin运行时库管理,`async`用于启动协程并返回`Deferred`对象,`await`则用于等待该对象完成并获取结果。文章还探讨了协程与传统线程的区别,并展示了如何取消协程任务及正确释放资源。
6 0
|
Java 区块链 Android开发
使用Kotlin高效地开发Android App(一)
使用Kotlin高效地开发Android App(一)
651 0
使用Kotlin高效地开发Android App(一)