kotlin的扩展函数“let、run、also、apply”的作用和区别

记录一下四个扩展函数的区别,使用经常记不住:
Kotlin的扩展函数let、run、also、apply都是用于简化代码的工具,它们可以在不修改原始类或对象的情况下添加新的功能和行为。下面是它们的作用和区别:

let:用于对一个可空对象进行操作,避免出现空指针异常。它会将对象作为lambda表达式的参数传递,并返回lambda表达式的结果。在lambda表达式中,可以进行空判断和空安全操作,以确保对象不为空。

run:用于执行一个lambda表达式并返回结果。与let不同的是,它不会将对象作为参数传递给lambda表达式,而是使用this关键字引用当前对象。它的返回值是lambda表达式的结果。

also:用于执行一个lambda表达式并返回对象本身。它与run类似,但是它将对象作为参数传递给lambda表达式,而不是使用this关键字引用当前对象。它的返回值是对象本身。

apply:用于对一个对象进行初始化和配置操作,并返回对象本身。它与also类似,但是它使用this关键字引用当前对象,而不是将对象作为参数传递给lambda表达式。它的返回值是对象本身。

总体而言,let和run用于处理对象的结果,also和apply用于处理对象本身。选择使用哪一个取决于你要达成的目标。

使用let扩展函数函数的简单程序例子
当你需要对一个可空对象进行操作,并避免出现空指针异常时,let函数就非常有用。以下是一个简单的Kotlin程序例子,使用了let函数来检查可空对象是否为空,如果不为空则执行操作。

fun main() {
val str: String? = “Hello World”
str?.let {
println(it.length)
}
}
在这个例子中,我们定义了一个可空字符串str,并使用?.安全调用运算符来调用let函数。如果str不为null,let函数将会执行传入的lambda表达式,lambda表达式中的it关键字代表str对象本身,我们在其中执行了一个打印操作,输出了字符串的长度。如果str为空,let函数不会执行lambda表达式,避免了空指针异常的出现。

使用run扩展函数的简单程序例子
run函数通常用于在对象上执行一系列操作,并返回结果。以下是一个简单的Kotlin程序例子,使用了run函数来创建一个新的字符串并执行操作:

fun main() {
val str = “Hello”
val result = str.run {
this + ” World”
}
println(result)
}
我们定义了一个字符串str,并使用run函数来执行一些操作。在run函数中,我们使用了this关键字引用了str对象本身,然后将其与另一个字符串拼接起来,并将拼接结果赋值给result变量。最后,我们使用println()函数输出result的值,即”Hello World”。

需要注意的是,run函数的返回值是最后一个表达式的结果,也就是this + ” World”的结果,因此result的值也是该结果。

使用apply扩展函数的简单程序例子
apply函数通常用于在对象上进行初始化和配置操作,并返回对象本身。以下是一个简单的Kotlin程序例子,使用了apply函数来创建一个新的TextView对象并设置其属性:

import android.widget.TextView

fun main() {
val textView = TextView(null).apply {
text = “Hello World”
textSize = 16.0f
setTextColor(0xFF0000FF.toInt())
}
println(textView)
}
在这个例子中,我们使用apply函数创建了一个新的TextView对象,并设置了其text、textSize和textColor属性。apply函数的lambda表达式中使用了this关键字引用了TextView对象本身,然后对其属性进行了配置。最后,我们将配置后的TextView对象赋值给textView变量,并使用println()函数输出其值,即TextView对象的字符串表示形式。

需要注意的是,apply函数的返回值是对象本身,即TextView对象。

使用also扩展函数函数的简单程序例子
also函数通常用于在对象上执行一些操作,并返回对象本身。以下是一个简单的Kotlin程序例子,使用了also函数来创建一个新的字符串并执行操作:

fun main() {
val str = “Hello”
val result = str.also {
println(“The original string is: $it”)
}
println(result)
}
在这个例子中,我们定义了一个字符串str,并使用also函数来执行一些操作。在also函数中,我们使用了lambda表达式中的it关键字引用了str对象本身,并输出了一个带有it变量的字符串。然后,also函数返回str对象本身,并将其赋值给result变量。最后,我们使用println()函数输出result的值,即str字符串本身。

需要注意的是,also函数的返回值是对象本身,即str对象。

阅读全文
下载说明:
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.dandroid.cn/archives/20268,转载请注明出处。
0

评论0

显示验证码
没有账号?注册  忘记密码?