Kotlin基础学习 --- 内置函数apply、let
Kotlin基础学习
·
apply内置函数
fun main(){
val buffer = "i am buffer "
//常规方式
println("buffer的字符长度是:${buffer.length}")
println("buffer的第一个字符是:${buffer.first()}")
println("buffer全部转化为大写:${buffer.toUpperCase()}")
//apply方式
//使用apply方式时,xxx.apply 在匿名函数体中会持有一个this == xxx本身
//apply内置函数会存在返回值,始终返回xxx本身,就可以一直链式调用
//在apply中this可以省略
buffer.apply {
println("buffer的字符长度是:${length}")
}.apply {
println("buffer的第一个字符是:${first()}")
}.apply {
println("buffer全部转化为大写:${toUpperCase()}")
}
}
这段代码的运行结果:
接下来看一下apply
@kotlin.internal.InlineOnly
public inline fun <T> T.apply(block: T.() -> Unit): T {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
block()
return this
//上述代码可以看出来,apply是扩展了所有的泛型对象 且最后return this
}
let内置函数
//let内置函数Lambda表达式的会持有一个it == list本身
//并且将Lambda表达式中最后一行作为返回值
val list : List<Int> = listOf(1,2,3,4,5)
val result = list.let {
it.first()+it.first()
}
println("result :${result}")
使用let函数对值判null并返回
fun main(){
println(get(null))
println(get("angle"))
}
fun get( info : String?) : String{
return info?.let {
"info is $info"
} ?: "info is null"
}
info is null
info is angle
总结:
info.apply
1. apply函数返回值永远是 info本身
2. apply函数的匿名函数体 { 持有的是 this == 调用者本身}
info.let
1. let函数的返回值是根据匿名函数最后一行的变化而变化
2. let函数的匿名函数题 { 持有的是 it == 调用者本身}
更多推荐
已为社区贡献1条内容
所有评论(0)