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

记录一下四个扩展函数的区别,使用经常记不住:

Kotlin的扩展函数letrunalsoapply都是用于简化代码的工具,它们可以在不修改原始类或对象的情况下添加新的功能和行为。下面是它们的作用和区别:

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

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

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

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

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

使用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对象,并设置了其texttextSizetextColor属性。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对象。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值