当前位置:网站首页>十三、Kotlin进阶学习:内联函数let、also、with、run、apply的用法。
十三、Kotlin进阶学习:内联函数let、also、with、run、apply的用法。
2022-07-30 05:43:00 【¥伊人独醉】
Kotlin提供了几种拓展函数(extension function),有的可以更优雅处理可空变量问题。
在学习 Kotlin 时,一定都会注意到它有许多let apply run 等这些 extension function,它们看起来大同小异,用起来似乎也经常可以相互替换,稍做修改就让程式依照正确的逻辑执行。
一、let
1、在函数体内使用 it 代替调用者访问其公有的属性和方法。
val person = Person("yrdz", 24)
person.let {
print("name = ${it.name}")
print("age = ${it.age}")
}2、可以对一个可能为空的对象(object?)进行判空操作。
val person = getPerson()
// 如果person为null,将不会执行let块
person?.let {
print("name = ${it.name}")
print("age = ${it.age}")
}3、返回值可以为函数的最后一行。
val person = Person("yrdz", 24)
val a = person.let {
it.age
it.name
}
print(a) // 输出"yrdz"
【案例】

日志:
![]()
二、also
also 的用法和 let 基本一样,区别在于 also 返回的是对象本身。
val person = Person("yrdz", 24)
val a = person.also {
it.name
}
print(a) // 输出"Person(name=yrdz, age=24)"
三、with
1、直接调用类的方法。
val person = Person("yrdz", 24)
with(person) {
print("name = $name, age = $age")
}
2、返回值可以为函数块的最后一行。
val person = Person("yrdz", 24)
val age = with(person) {
name
age
}
print("age = $age") // 输出"age = 24"
【案例】

日志:

四、run
run 可以看作 let 和 with 的结合体。集合了两者的功能和优点,一方面不用 it 代替对象,一方面可以对对象进行判空,返回的值是lambda表达式的最后一句;
val person = Person("yrdz", 24)
person.run {
println("name = $name")
}
val age = person.run {
26
}
println("age = $age")
getPerson()?.run {
println("run into")
}
【案例】

日志:
![]()
五、apply
apply 的用法和 run 基本一样,区别在于 apply 返回的是对象本身。可以看作 let 和 also 的结合体。
返回的值是lambda表达式的最后一句;必须要有返回值。
【案例】

日志:
![]()
六、总结
run 可以看作 let 和 with 的结合体。
apply 可以看作 also 和 with 的结合体。
所有一般来说,使用 run 和 apply 就行了。
边栏推荐
猜你喜欢

互联网商城盲盒app为何如此火爆

Usage of exists in sql

Use kotlin to extend plugins/dependencies to simplify code (after the latest version 4.0, this plugin has been deprecated, so please choose to learn, mainly to understand.)

使用kotlin扩展插件/依赖项简化代码(在最新版本4.0以后,此插件已被弃用,故请选择性学习,以了解为主。)

FastAPI Quick Start

npm run serve starts error npm ERR Missing script "serve"

JVM学习(二) 垃圾收集器

MySQL - 多表查询与案例详解

C#下利用开源NPlot绘制股票十字交叉线

torch distributed training
随机推荐
Jdbc & Mysql timeout分析
二十二、Kotlin进阶学习:简单学习RecyclerView实现列表展示;
C# WPF中监听窗口大小变化事件
C#下大批量一键空投实现
Function functional interface and application
Nodejs PM2 monitoring and alarm email (2)
Flink CDC implements Postgres to MySQL streaming processing transmission case
MYSQL一站式学习,看完即学完
十九、Kotlin进阶学习:1、管道数据的收和发;2、管道的关闭;3、生产者和消费者;4、管道的缓存区;
Mycat2.0搭建教程
MySQL achievement method 】 【 5 words, single table SQL queries
Function 函数式接口及应用
Flink CDC 实现Postgres到MySQL流式加工传输案例
uni-app: The use of uni-icons and how to customize icons
npm安装和npm安装——保存
oracle row to column, column to row summary
Kotlin协程的简单用法:1、GlobalScope(不建议使用);2、lifecycleScope、viewModelScope(建议使用);
JVM Learning (2) Garbage Collector
Monstache执行Monstache - f配置。toml出错不存在处理器类型和名称(附件)(= parse_exc类型
The number of warehouse 】 data quality
