Kotlin 的作用域函数

作者: wmjwmj | 来源:发表于2019-03-26 19:46 被阅读11次

kotlin 标准库中提供了一些函数,用来在临时的作用域内执行代码。在这些作用域内,无需通过对象名就能访问对象。

作用域函数有:run、with、T.run、T.let、T.also、T.apply

一、run

单独使用时没啥作用

    run{
        println("my name is wmj")
    }

但是它有返回值,返回值是最后一个对象

    // str = "my name is wmj"
    val str = run {
        val name = "wmj"
        "my name is $name"
    }

二、with

with 括号中传入对象,用this操作对象,this可以省略

    val person = Person("wmj", 25)
    with(person) { 
        name = ""
        age = 30
    }

如果对象是可空的,this 不可以省略

    val person2: Person?  = Person("wmj2", 26)
    with(person2) {
        this?.name = ""
        this?.age = 30
    }

三、T.run

T.runthis操作对象,this可以省略,和 with 作用一样。

    person.run { 
        name = ""
        age = 30
    }

但是如果对象是可空的,用 T.runwith 更方便

    person?.run {
        name = ""
        age = 30
    }

四、T.let

T.letit操作对象

    person.let {
        it.name = "wmj"
        it.age = 30
    }

如果对象是可空的

    person2?.let {
        it.name = "wmj"
        it.age = 30
    }

T.runT.let 在使用上更加简洁,但是 T.let 有以下优势

  • 更清楚的区分变量与外部类的成员
  • this 不能省略的情况下,itthis 更短更清晰
  • it 可以更换成其他名字
    person?.let { student ->
        student.name = "wmj"
        student.age = 22
    }

五、 T.also

T.alsoit 操作对象,和 T.let作用一样

    person.also {
        it.name = "wmj"
        it.age = 30
    }

但是他们的返回值不同,T.let 返回最后一个对象的值,T.also 返回 this

    val a: Int? = person?.let {
        it.name = ""
        it.age
    }

    val b: Person? = person?.also {
        it.name = ""
        it.age = 30
    }

六、T.apply

T.applythis 作为参数,并返回了 this,很方便链式调用

        val starter = Intent(context, AActivity::class.java)
                .apply { putExtra("key", 1) }
                .apply { putExtra("key2", 2) }

相关文章

  • 详解Kotlin中的作用域函数

    Kotlin作用域函数 作用域函数,Kotlin在语法层面支持拓展函数,作用域函数,作用域函数是指对数据做一些变换...

  • kotlin中Scope函数

    Scope函数翻译过来就叫作用域函数吧,Kotlin中的作用域函数包含let, run with, apply, ...

  • Kotlin修炼指南

    Kotlin修炼指南 作用域函数 作用域函数是Kotlin中的一个非常有用的函数,它主要分为两种,一种是拓展函数式...

  • Kotlin 常用作用域函数,区别和使用

    1. 有关作用域函数: Kotlin 中有很多作用域函数, 但是常见的使用场景是不同的。 常见的五种作用域函数 l...

  • [Kotlin Tutorials 10] Scope Func

    Scope Functions: Kotlin中的作用域函数 Kotlin标准库提供了5个scope functi...

  • Kotlin 作用域函数

    1、作用域函数区别表 学习方法:取上述demo,将let、run、with、apply、also相互替换更改试试K...

  • kotlin 作用域函数

    kotlin 作用域函数 作用:它们的唯一目的是在对象的上下文中执行代码块。当对一个对象调用这样的函数并提供一个 ...

  • Kotlin作用域函数

    kotlin中经常出现run、with、let、also、apply,开始时候容易迷糊,有什么用有什么区别? 一:...

  • Kotlin:作用域函数

    前言 最近使用kotlin语言开发了新的项目,kotlin的一些特性和大量的语法糖相当好用,相比于java,开发效...

  • Kotlin 作用域函数

    上面是常用的五个作用域函数 run let with apply also从定义上我们看出apply 和 also...

网友评论

    本文标题:Kotlin 的作用域函数

    本文链接:https://www.haomeiwen.com/subject/fddlvqtx.html