当前位置:网站首页>十三、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 就行了。
边栏推荐
猜你喜欢
标准输入输出流(System.in,System.out)
互联网商城盲盒app为何如此火爆
Remember a Mailpress plugin RCE vulnerability recurrence
C#下大批量一键空投实现
Servlet基本原理与常见API方法的应用
sqli-labs shooting range SQL injection learning Less-1
FastAPI 快速入门
SQL Server database generation and execution of SQL scripts
Nodejs PM2 monitoring and alarm email (2)
[MATLAB] Image Processing - Recognition of Traffic Signs
随机推荐
MySQL - 函数及约束命令
Blind injection, error injection, wide byte injection, stack injection study notes
Remember a traffic analysis practice - Anheng Technology (August ctf)
Understand JDBC in one article
[PASECA2019]honey_shop
Student management system
Nodejs PM2 monitoring and alarm email (2)
2022CISCNmisc
MySQL achievement method 】 【 5 words, single table SQL queries
vulnhub-XXE ctf security question
Powerhouse Cup Preliminary WP
Deserialization character escape
mysql delete duplicate data in the table, (retain only one row)
Jdbc & Mysql timeout分析
misc-file steganography of CTF
Function functional interface and application
Function 函数式接口及应用
protobuf编码及网络通信应用(一)
Redis 客户端常见异常分析
Invalid bound statement (not found)出现的原因和解决方法