Kotlin 中的 let 关键字

Niyati Thakkar 2023年1月30日
  1. Kotlin 中的 let 函数
  2. 在 Kotlin 中使用 let 函数进行空检查
Kotlin 中的 let 关键字

本教程教授范围函数 let 以及如何在 Kotlin 中使用它。

Kotlin 中的 let 函数

作用域函数提供了一种在代码块内的临时作用域内声明变量、执行所需操作和返回一些值的方法,从而产生干净紧凑的代码。let 是 5 个作用域函数之一,即 runalsoapplywithlet

let 函数将对象(在其上调用它)作为参数,对其执行操作,并返回 lambda 表达式的结果。

变量可以在 let 表达式中声明,但这些变量不能在 let 表达式之外使用,因为 Kotlin let 是一个作用域函数。

结果可以是任何数据类型。结果不必与对象的类型相同。

语法:

var var_name = object.let{
    // lambda expression
    // declare variables
    // perform tasks
    // return some value
}

我们将使用 var 类型的 var name 变量,然后使用预定义类型或自定义类。我们可以使用 let 函数对这些变量执行操作,并使用引用对象上下文的 it 关键字访问对象的值。

重命名 it 关键字会将其转换为 lambda 函数。我们可以操作变量并返回保存在 var name 中的任何数据类型的结果。

let 函数可能返回也可能不返回任何值。如果未提及返回值,则仅返回 Kotlin.Unit

fun main(){
    var str = "Hello"
    // let function returning string
    var temp1 = str.let {
        var gm = "Good Morning"
        "$it! $gm".toUpperCase()
    }
    // let function performing println function inside it
    var temp2 = str.let{ greetings ->
        for(i in 1..3){
            println(greetings+" $i")
        }
    }
    println(str)
    println(temp1)
    println(temp2)
}

输出:

Hello 1
Hello 2
Hello 3
Hello
HELLO! GOOD MORNING
kotlin.Unit

上面的代码表明,在 temp1 变量中,我们通过 str 使用 let 函数。变量 gm 只能在 let 块中访问。

itstr 的副本,我们也可以使用 lambda 表达式使用另一个名称。let 函数返回 $str!大写的 $gm 分配给 temp1 变量。

temp2 中,greetings 是一个与 str 具有相同值的变量。

Lambda 表达式有一个输出 greetings 值和 ifor 循环。它不返回任何值。

因此,当我们打印 temp2 时,Kotlin.Unit 是表示变量已使用单位值初始化的输出。此外,在对 str 字符串执行两次 let 操作后,它的值不会改变。

在 Kotlin 中使用 let 函数进行空检查

let 函数只有在给定变量不为 null 时才能执行操作。例如,如果我们想在 Student 类中打印姓名不为 null 的学生姓名。

class Student(var name : String? = null, roll : Int, grade : Char? = 'C')
fun main(args : Array<String>){
    var s1 = Student("Jim", 9304, 'A')
    var s2 = Student(null,7493,'B')
    var s3 = Student("Pam", 2849)
    var names = listOf<String?>(s1.name,s2.name,s3.name)
    for(name in names){
        name?.let{println(it)}
    }
}

输出:

Jim
Pam

在上面的示例中,我们创建了一个具有三个参数的 Student 类,namerollgrade。学生的名字最初是 null

? 表示此参数可以为 null。然后,我们在 main 函数中创建 Student 类的三个对象。

s1 具有所有三个参数,而不是 nulls2 有两个参数,roll 和 grade,但是名字是 nulls3 有两个参数 name 和 roll,但是没有提到 grade。

变量 names 是学生姓名的列表,我们使用 for 循环访问每个姓名。name?.let{println(it)} 首先检查名称是否为 null,如果为 null,则不执行 let

如果不为 null,则将学生的姓名发送给 let,而 let 将打印姓名。it 是引用名称本身的名称对象的副本。

作者: Niyati Thakkar
Niyati Thakkar avatar Niyati Thakkar avatar

Niyati is a Technical Content Writer and an engineering student. She has written more than 50 published articles on Data Structures, Algorithms, Git, DBMS, and Programming Languages like Python, C/C++, Java, CSS, HTML, KOTLIN, JavaScript, etc. that are very easy-to-understand and visualize.

LinkedIn

相关文章 - Kotlin Keyword