Kotlin 中的 let 关键字
本篇文章教授范围函数 let
以及如何在 Kotlin 中使用它。
Kotlin 中的 let
函数
作用域函数提供了一种在代码块内的临时作用域内声明变量、执行所需操作和返回一些值的方法,从而产生干净紧凑的代码。let
是 5 个作用域函数之一,即 run
、also
、apply
、with
和 let
。
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
块中访问。
it
是 str
的副本,我们也可以使用 lambda 表达式使用另一个名称。let
函数返回 $str!大写的 $gm
分配给 temp1
变量。
在 temp2
中,greetings
是一个与 str
具有相同值的变量。
Lambda 表达式有一个输出 greetings
值和 i
的 for
循环。它不返回任何值。
因此,当我们打印 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
类,name
、roll
和 grade
。学生的名字最初是 null
。
这 ?
表示此参数可以为 null
。然后,我们在 main 函数中创建 Student 类的三个对象。
s1
具有所有三个参数,而不是 null
。s2
有两个参数,roll 和 grade,但是名字是 null
,s3
有两个参数 name 和 roll,但是没有提到 grade。
变量 names
是学生姓名的列表,我们使用 for
循环访问每个姓名。name?.let{println(it)}
首先检查名称是否为 null
,如果为 null
,则不执行 let
。
如果不为 null
,则将学生的姓名发送给 let
,而 let
将打印姓名。it
是引用名称本身的名称对象的副本。
相关文章
如何在 Java 中延迟几秒钟的时间
发布时间:2023/12/17 浏览次数:217 分类:Java
-
本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。
如何在 Java 中把 Hashmap 转换为 JSON 对象
发布时间:2023/12/17 浏览次数:187 分类:Java
-
它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。
如何在 Java 中按值排序 Map
发布时间:2023/12/17 浏览次数:171 分类:Java
-
本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map
进行排序,并列出了一些示例代码来理解它。
如何在 Java 中打印 HashMap
发布时间:2023/12/17 浏览次数:192 分类:Java
-
本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。
在 Java 中更新 Hashmap 的值
发布时间:2023/12/17 浏览次数:146 分类:Java
-
本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。
Java 中的 hashmap 和 map 之间的区别
发布时间:2023/12/17 浏览次数:79 分类:Java
-
本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,
在 Java 中获取用户主目录
发布时间:2023/12/17 浏览次数:218 分类:Java
-
这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。
Java 中 size 和 length 的区别
发布时间:2023/12/17 浏览次数:179 分类:Java
-
这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。
Java 中的互斥锁
发布时间:2023/12/17 浏览次数:111 分类:Java
-
了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,