Kotlin中let、with、run、apply、also函数如何正确运用?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1333个文字,预计阅读时间需要6分钟。
一、内联扩展函数+let扩展函数的实际应用上是一个作用域函数,当你需要在一个特定的作用域范围内定义一个变量时,let函数是一个不错的选择;let函数的另一个作用是,可以避免写一定
一、内联拓展函数 letlet 扩展函数的实际上是一个作用域函数,当你需要去定义一个变量在一个特定的作用域范围内,let函数的是一个不错的选择;let函数另一个作用就是可以避免写一些判断null的操作。
1.1 let 函数的使用的一般结构object.let {
it.todo() //在函数体内使用it替代object对象去访问其公有的属性和方法
...
}
//另一种用途 判断object为null的操作
object?.let { //表示object不为null的条件下,才会去执行let函数体
it.todo()
}
1.2 let函数底层的inline扩展函数+lambda结构
@kotlin.internal.InlineOnly
public inline fun <T, R> T.let(block: (T) -> R): R {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block(this)
}
意思就是 T 类型的对象调用 let 方法,实际调用的是传入 let 方法的 lambda 表达式的 block 块,最终返回 lambda 表达式的返回值。
lambda 表达式内部通过 it 指代该对象。
- 场景一: 最常用的场景就是使用let函数处理需要针对一个可null的对象统一做判空处理。
本文共计1333个文字,预计阅读时间需要6分钟。
一、内联扩展函数+let扩展函数的实际应用上是一个作用域函数,当你需要在一个特定的作用域范围内定义一个变量时,let函数是一个不错的选择;let函数的另一个作用是,可以避免写一定
一、内联拓展函数 letlet 扩展函数的实际上是一个作用域函数,当你需要去定义一个变量在一个特定的作用域范围内,let函数的是一个不错的选择;let函数另一个作用就是可以避免写一些判断null的操作。
1.1 let 函数的使用的一般结构object.let {
it.todo() //在函数体内使用it替代object对象去访问其公有的属性和方法
...
}
//另一种用途 判断object为null的操作
object?.let { //表示object不为null的条件下,才会去执行let函数体
it.todo()
}
1.2 let函数底层的inline扩展函数+lambda结构
@kotlin.internal.InlineOnly
public inline fun <T, R> T.let(block: (T) -> R): R {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block(this)
}
意思就是 T 类型的对象调用 let 方法,实际调用的是传入 let 方法的 lambda 表达式的 block 块,最终返回 lambda 表达式的返回值。
lambda 表达式内部通过 it 指代该对象。
- 场景一: 最常用的场景就是使用let函数处理需要针对一个可null的对象统一做判空处理。

