Kotlin let函数关键字的解释与示例

756 阅读2分钟

Kotlinlet 关键字是几个Kotlin范围函数关键字中的一个。

Kotlin中的范围函数关键字允许你在对象的上下文中执行一个代码块。

使用范围函数可以使你的代码更加简洁和可读。

例如,假设你有一个User 类,其定义如下:

class User(var username: String, var isActive: Boolean) {
fun hello() {
println("Hello! I'm $username")
}
}

通常实例化一个User 对象的方法是声明一个新的变量,如下图所示:

val user = User("Nathan", true)
user.hello() // Hello! I'm Nathan

user.username = "Jack"
user.hello() // Hello! I'm Jack

通过使用let 关键字,你可以省略将返回的User 对象分配给该变量。

下面的代码示例的输出与上面的相同:

User("Nathan", true).let {
it.hello() // Hello! I'm Nathan

it.username = "Jack"
it.hello() // Hello! I'm Jack
}

不需要初始化一个新的变量,你可以在let 关键字中使用lambda表达式直接调用生成的User 对象的方法和属性。

你调用let 函数的对象可以通过使用it 关键字在let 内访问:

User("Nathan", true).let {
println(it.username) // Nathan
 println(it.isActive) // true
}

let 关键字返回你在代码块内定义的lambda表达式的结果。

在上面的例子中,lambda表达式没有返回任何东西,所以它返回一个Unit 类型:

val unit = User("Nathan", true).let {
it.hello() // Hello! I'm Nathan

it.username = "Jack"
it.hello() // Hello! I'm Jack
}
println(unit is Unit) // true

要返回除Unit 以外的东西,你的let 代码块内的最后一行代码必须返回一个值。

例如,你可以返回username 属性的length 值:

val usernameLength = User("Nathan", true).let {
it.hello()
it.username = "Jack"
 it.username.length
}
println(usernameLength) // 4

如果上面的it.username.length 不在代码块的最后一行,let 仍然会返回一个Unit ,而不是一个Int 的值。

最后,let 关键字也可以在任何Kotlin内置对象上调用,比如StringBoolean

当你有一个nullable类型的变量时,这特别有用。你只需要用?. 符号执行一次安全调用:

val name: String? = "Nathan"
name?.let {
 println(it.length) // 6
 println(it.lastIndex) // 5
}

在不使用let 的情况下,你需要在调用lengthlastIndex 属性之前添加安全调用符号?. ,如下所示:

val name: String? = "Nathan"
println(name?.length)
println(name?.lastIndex)

现在你已经学会了let 关键字在Kotlin中的作用。非常好!👍