迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

Kotlin 中的 let 关键字

作者:迹忆客 最近更新:2023/03/21 浏览次数:

本篇文章教授范围函数 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 是引用名称本身的名称对象的副本。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 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 浏览次数:132 分类:Java

Java 中最常用的顺序是自然顺序。 本文将展示如何使用 naturalOrder() 函数对数组进行排序。

计算 Java 数组中的重复元素

发布时间:2023/05/01 浏览次数:202 分类:Java

本篇文章介绍Java计算数组中重复元素的方法。计算 Java 数组中的重复元素。我们可以创建一个程序来计算数组中的重复元素。 该数组可以是未排序的,也可以是已排序的。

Java 中 List 和 Arraylist 的区别

发布时间:2023/05/01 浏览次数:90 分类:Java

表示为单个单元的一组单个对象称为集合。 在 Java 中,Collection 是一个具有多个已定义接口和类的框架,用于将一组对象表示为一个单元。 它允许我们操纵

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便