Kotlin let run with apply also 关键字

2023-10-14 03:20
文章标签 关键字 apply kotlin run also let

本文主要是介绍Kotlin let run with apply also 关键字,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Kotlin let run with apply also 关键字

参考官网学习资料 https://play.kotlinlang.org/byExample/06_scope_functions/

一、 let

Kotlin 标准库函数 let 可用于范围界定和空检查。当在对象上调用时,let 执行给定的代码块并返回其最后一个表达式的结果。该对象可在块内通过引用it(默认情况下)或自定义名称来访问。

fun customPrint(s: String) {print(s.uppercase())
}fun main() {val empty = "test".let {               // 1customPrint(it)                    // 2it.isEmpty()                       // 3}println(" is empty: $empty")fun printNonNull(str: String?) {println("Printing \"$str\":")str?.let {                         // 4print("\t")customPrint(it)println()}}fun printIfBothNonNull(strOne: String?, strTwo: String?) {strOne?.let { firstString ->       // 5 strTwo?.let { secondString ->customPrint("$firstString : $secondString")println()}}}printNonNull(null)printNonNull("my string") printIfBothNonNull("First","Second") 
}
  1. 根据字符串“test”的结果调用给定块。

  2. 通过 it 引用调用“test”上的函数。

  3. let 返回该表达式的值。

  4. 使用安全调用,因此 let 及其代码块将仅在非空值上执行。

  5. 使用自定义名称代替it,以便嵌套let可以访问外部let的上下文对象。在此代码里也就是firstString替代了第一层范围内的it,secondStirng替代了第二层范围内的it

二、 run

与 let 一样,run 是标准库中的另一个作用域函数。基本上,它执行相同的操作:执行代码块并返回其结果。不同之处在于,在运行内部,对象是通过 this 访问的。当您想要调用对象的方法而不是将其作为参数传递时,这非常有用。

fun main() {fun getNullableLength(ns: String?) {println("for \"$ns\":")ns?.run {                                                  // 1println("\tis empty? " + isEmpty())                    // 2println("\tlength = $length")                           length                                                 // 3}}getNullableLength(null)getNullableLength("")getNullableLength("some string with Kotlin")
}

简单来说就是run括号里的可以直接不用额外的this或者it来代替当前对象去调用该对象的方法,可以直接调用该对象里的方法

三、with

with 是一个非扩展函数,可以简洁地访问其参数的成员:引用其成员时可以省略实例名称。

class Configuration(var host: String, var port: Int) fun main() {val configuration = Configuration(host = "127.0.0.1", port = 9000) with(configuration) {println("$host:$port")}// instead of:println("${configuration.host}:${configuration.port}")    
}

用with修饰的小括号里范围内可以直接不用写对象变量名直接调用成员了,比如不用configuration.host,而可以直接写成host

四、apply

apply 在对象上执行一段代码并返回对象本身。在块内,对象由 this 引用。该函数对于初始化对象很方便。

data class Person(var name: String, var age: Int, var about: String) {constructor() : this("", 0, "")
}fun main() {val jake = Person()                                     // 1val stringDescription = jake.apply {                    // 2name = "Jake"                                       // 3age = 30about = "Android developer"}.toString()                                            // 4println(stringDescription)
}

五、also

也像 apply 一样工作:它执行给定的块并返回调用的对象。在块内部,对象由它引用,因此更容易将其作为参数传递。此函数可以方便地嵌入附加操作,例如登录调用链。

data class Person(var name: String, var age: Int, var about: String) {constructor() : this("", 0, "")
}fun writeCreationLog(p: Person) {println("A new person ${p.name} was created.")              
}fun main() {val jake = Person("Jake", 30, "Android developer")   // 1.also {                                          // 2 writeCreationLog(it)                         // 3}
}

这篇关于Kotlin let run with apply also 关键字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/207776

相关文章

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

Kotlin 枚举类使用举例

《Kotlin枚举类使用举例》枚举类(EnumClasses)是Kotlin中用于定义固定集合值的特殊类,它表示一组命名的常量,每个枚举常量都是该类的单例实例,接下来通过本文给大家介绍Kotl... 目录一、编程枚举类核心概念二、基础语法与特性1. 基本定义2. 带参数的枚举3. 实现接口4. 内置属性三、

Python批量替换多个Word文档的多个关键字的方法

《Python批量替换多个Word文档的多个关键字的方法》有时,我们手头上有多个Excel或者Word文件,但是领导突然要求对某几个术语进行批量的修改,你是不是有要崩溃的感觉,所以本文给大家介绍了Py... 目录工具准备先梳理一下思路神奇代码来啦!代码详解激动人心的测试结语嘿,各位小伙伴们,大家好!有没有想

Java中的volatile关键字多方面解析

《Java中的volatile关键字多方面解析》volatile用于保证多线程变量可见性与禁止重排序,适用于状态标志、单例模式等场景,但不保证原子性,相较synchronized更轻量,但需谨慎使用以... 目录1. volatile的作用1.1 保证可见性1.2 禁止指令重排序2. volatile的使用

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时

Kotlin Map映射转换问题小结

《KotlinMap映射转换问题小结》文章介绍了Kotlin集合转换的多种方法,包括map(一对一转换)、mapIndexed(带索引)、mapNotNull(过滤null)、mapKeys/map... 目录Kotlin 集合转换:map、mapIndexed、mapNotNull、mapKeys、map

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Java 关键字transient与注解@Transient的区别用途解析

《Java关键字transient与注解@Transient的区别用途解析》在Java中,transient是一个关键字,用于声明一个字段不会被序列化,这篇文章给大家介绍了Java关键字transi... 在Java中,transient 是一个关键字,用于声明一个字段不会被序列化。当一个对象被序列化时,被

Kotlin Compose Button 实现长按监听并实现动画效果(完整代码)

《KotlinComposeButton实现长按监听并实现动画效果(完整代码)》想要实现长按按钮开始录音,松开发送的功能,因此为了实现这些功能就需要自己写一个Button来解决问题,下面小编给大... 目录Button 实现原理1. Surface 的作用(关键)2. InteractionSource3.