📜  kotlin 作用域函数 - Kotlin (1)

📅  最后修改于: 2023-12-03 15:32:30.724000             🧑  作者: Mango

Kotlin作用域函数

Kotlin作用域函数是一种函数类型,用于在特定对象上运行代码块。这些函数可以使我们更加便捷地操作对象,减少重复代码的编写。Kotlin提供了五种不同的作用域函数,分别是 letapplyalsorunwith

1. let

let 函数可以帮助我们避免在代码中使用空指针异常。它接收一个可空类型的对象,以及一个 Lambda 表达式。在 Lambda 表达式内,我们可以将对象转换为非空类型。如果对象为 null,则不会运行该 Lambda 表达式,并返回 null。

val text: String? = "hello world"

text?.let { it ->
    // do something with non-null 'it'
    println(it.toUpperCase())
}
2. apply

apply 函数是一个初始化块,用于设置一个对象的属性值。它接收一个对象,并在对象上运行 Lambda 表达式。在 Lambda 表达式中,我们可以直接引用该对象。

val person = Person().apply {
    firstName = "John"
    lastName = "Doe"
    age = 30
}
3. also

also 函数与 apply 函数非常相似,也是一个初始化块。它在给定的对象上运行一个Lambda表达式,同时返回该对象本身。与 apply 函数不同的是,它的返回值是该对象,并不能修改该对象的属性。

val person = Person().also {
    it.firstName = "John"
    it.lastName = "Doe"
    it.age = 30
}
4. run

run 函数与 let 函数非常相似,也可用于避免空指针异常。它接收一个对象,并在该对象上运行一个 Lambda 表达式。在 Lambda 表达式内,我们可以将对象转换为非空类型。与 let 函数不同的是,run 函数可以访问对象的属性和函数,而不需要使用it关键字。

val text: String? = "hello world"

val upperCaseText = text?.run {
    // do something with non-null 'this'
    this.toUpperCase()
}
5. with

with 函数与 run 函数非常相似,也是在给定的对象上运行一个 Lambda 表达式。它与 run 函数的主要区别在于,with 函数没有上下文对象 this,而是将对象作为第一个参数传递给 Lambda 表达式。

val person = Person("John", "Doe", 30)

val personInfo = with(person) {
    // do something with 'person'
    "$firstName $lastName is $age years old."
}

作用域函数是 Kotlin 强大的一部分,可以大大减少代码中的冗余,并揭示对象的这些函数改善代码可读性。