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/05/01 浏览次数:139 分类:Java
-
Java 提供了不同的方法来获取文件的字节大小。 本教程演示了在 Java 中获取文件大小的不同方法。使用 Java IO 的文件类获取文件大小 Java IO 包的 File 类提供了以字节为单位获取文件大小的功能。
Java 中的文件分隔符
发布时间:2023/05/01 浏览次数:108 分类:Java
-
本篇文章介绍了 Java 中的文件分隔符。Java 中的文件分隔符 文件分隔符是用来分隔目录的字符; 例如,Unix 使用 /,Windows 使用 \ 作为文件分隔符。
Java 中的文件过滤器
发布时间:2023/05/01 浏览次数:193 分类:Java
-
本篇文章介绍如何在 Java 中使用 FileFilter。FileFilter 用于过滤具有特定扩展名的文件。 Java内置包IO和Apache Commons IO为FileFilter提供了类和接口来进行文件过滤操作。
Java 获取 ISO 8601 格式的当前时间戳
发布时间:2023/05/01 浏览次数:132 分类:Java
-
本篇文章介绍了 ISO 8601 日期格式、其重要性及其在 Java 中的使用。 它还列出了一些优点来强调为什么应该使用 ISO 格式来表示日期。
在 Java 中获取数组的子集
发布时间:2023/05/01 浏览次数:142 分类:Java
-
本篇文章介绍了几种在 Java 中获取数组子集的方法。使用 Arrays.copyOf() 方法获取数组的子集 使用 Arrays.copyOfRange() 方法获取数组的子集
用 Java 填充二维数组
发布时间:2023/05/01 浏览次数:110 分类:Java
-
二维数组是基于表结构的,即行和列,填充二维数组不能通过简单的添加到数组操作来完成。 本篇文章介绍如何在 Java 中填充二维数组。
计算 Java 数组中的重复元素
发布时间:2023/05/01 浏览次数:202 分类:Java
-
本篇文章介绍Java计算数组中重复元素的方法。计算 Java 数组中的重复元素。我们可以创建一个程序来计算数组中的重复元素。 该数组可以是未排序的,也可以是已排序的。
Java 中 List 和 Arraylist 的区别
发布时间:2023/05/01 浏览次数:90 分类:Java
-
表示为单个单元的一组单个对象称为集合。 在 Java 中,Collection 是一个具有多个已定义接口和类的框架,用于将一组对象表示为一个单元。 它允许我们操纵