内联函数let、also、with、run、apply的用法

let

  1. 在函数体内使用 it 代替调用者访问其公有的属性和方法
    val person = Person("fzh", 22)
    person.let {
        print("name = ${it.name}")
    }
  1. 可以对一个可能为空的对象(object?)进行判空操作
    val person = getPerson()
    // 如果person为null,将不会执行let块
    person?.let {
        print("name = ${it.name}")
    }
  1. 返回值可以为函数的最后一行
    val person = Person("fzh", 22)
    val a = person.let {
        it.name
    }
    print(a) // 输出"fzh"

also

also 的用法和 let 基本一样,区别在于 also 返回的是对象本身。

    val person = Person("fzh", 22)
    val a = person.also {
        it.name
    }
    print(a) // 输出"Person(name=fzh, age=22)"

with

  1. 直接调用类的方法
    val person = Person("fzh", 22)
    with(person) {
        print("name = $name, age = $age")
    }
  1. 返回值可以为函数块的最后一行
    val person = Person("fzh", 22)
    val age = with(person) {
        age
    }
    print("age = $age") // 输出"age = 22"

run

run 可以看作 let 和 with 的结合体。集合了两者的功能和优点,一方面不用 it 代替对象,一方面可以对对象进行判空。

    val person = Person("fzh", 22)
    person.run {
        println("name = $name")
    }
    val age = person.run {
        22
    }
    println("age = $age")
    getPerson()?.run {
        println("run into")
    }

apply

apply 的用法和 run 基本一样,区别在于 apply 返回的是对象本身。可以看作 let 和 also 的结合体

总结

run 可以看作 let 和 with 的结合体。

apply 可以看作 also 和 with 的结合体。

所有一般来说,使用 run 和 apply 就行了。

参考

  • Kotlin系列之let、with、run、apply、also函数的使用

你可能感兴趣的:(kotlin)