• Kotlin 作用域函数(apply、also、run、let、takeIf)


    Kotlin 中,作用域函数是一组用来在特定作用域中操作对象的函数。它们允许在给定作用域内对对象进行属性赋值、方法调用转换等操作,并返回相应的结果

    Kotlin提供了几个常用的作用域函数


    apply

    apply 函数将对象作为上下文 (this),并允许在一个代码块中对对象进行属性赋值、方法调用等操作。最后返回对象本身。

    1. class Bean(var name: String, var age: Int)
    2. fun main() {
    3. val bean = Bean("wk", 25)
    4. val result = bean.apply { // 返回对象本身
    5. name = "红红"
    6. age = 16
    7. }
    8. println(result.name) // 打印:红红
    9. println(result.age) // 打印:16
    10. }

    这个在实际的开发工作当中运用得很广泛,比如说给数据 Bean 赋值。如果是 java 语言的话就要 set.. set.. 而 Kotlin 直接开启一个对象的作用域,在这个作用域内赋值,省略了很多冗余代码


    also:

    also 函数将对象作为 lambda 表达式的参数 (it),并允许在 lambda 表达式中对对象进行操作。最后返回对象本身。

    1. fun main() {
    2. val bean = Bean("wk", 25)
    3. val result = bean.also { // 返回对象本身
    4. it.name = "火火"
    5. it.age = 17
    6. }
    7. println(result.name) // 打印:火火
    8. println(result.age) // 打印:17
    9. }

    also 和 apply 一样是返回对象本身,但是 also 作用域内是 it,不是 this,所以 also 一般用 it 去调用别的函数会比较方便


    run:

    run 函数将对象作为上下文 (this),并允许在 lambda 表达式中直接访问对象的属性和方法。最后返回 lambda 表达式的结果。

    1. fun main() {
    2. val bean = Bean("wk", 25)
    3. val result = bean.run { // 返回最后一行
    4. name = "水水"
    5. 50
    6. }
    7. println(result) // 打印:50
    8. println(bean.name) // 打印:水水
    9. }

    let:

    let 函数将对象作为 lambda 表达式的参数 (it),并允许在 lambda 表达式中对对象进行操作,如转换、处理等。最后返回 lambda 表达式的结果。

    1. fun main() {
    2. val bean = Bean("wk", 25)
    3. val result = bean.let { // 返回最后一行
    4. it.name = "冰冰"
    5. 51
    6. }
    7. println(result) // 打印:51
    8. println(bean.name) // 冰冰
    9. }

    takeIf:

    takeIf 函数将对象作为 lambda 表达式作为参数,如果 lambda 返回 true,则返回原始对象false 则返回 null。它可以用于进行条件判断并选择性地操作对象。

    1. fun main() {
    2. val bean = Bean("wk", 25)
    3. val result = bean.takeIf { // 最后一行是 true 正常返回对象, 反之返回 null
    4. it.name = "木木"
    5. true/false
    6. }
    7. println(result?.name) // 打印:木木/null
    8. }

    这些作用域函数在不同的情况下可以提供更简洁灵活的代码编写方式。我个人用的最多的是 apply 和 let

  • 相关阅读:
    应用实践 | 10 亿数据秒级关联,货拉拉基于 Apache Doris 的 OLAP 体系演进
    华为OD机试真题-事件推送-2023年OD统一考试(B卷)
    如何驾驭ChatGPT:掌控有效对话!
    IntelliJ IDEA 如何设置类注释和方法注释
    【视频】结构方程模型SEM分析心理学营销数据路径图可视化|数据分享
    Flink中的数据倾斜与解决方案实践
    Java线程中的状态
    数据分析思维模型和方法
    docker搭建ELK
    计算机网络 | 数据链路层
  • 原文地址:https://blog.csdn.net/weixin_47592544/article/details/132838828