kotlin的let,with,run,apply,also,异同区别

kotlin的let,with,run,apply,also,异同区别

例如:

class Person(var name: String, var age: Int) {
    fun eat() {
        println("吃饭")
    }

    fun work(hour: Int): Int {
        println("$name $age 工作 $hour,赚${hour * 60}")
        return hour * 60
    }
}

fun main(args: Array<String>) {
    var s: String? = null

    //没用let前,每个都要加 ? 判断是否为空
    val len = s?.length
    var ss = s?.toByte()

    println(len)
    println(ss)

    //使用let后,只需加一次?判空
    s?.let {
        val len = it.length
        it.toByte()
    }



    val person = Person("zhang", 18)

    /**
     * with()把传入的对象作为接受者,函数内可使用this指代该对象来访问公有属性和方法。
     * 函数的返回值为函数块最后一行或指定的return表达式。
     */
    val result1 = with(person) {
        age = 19
        eat()
        work(996)
    }
    println("结果1:$result1")
    println("----------")


    /**
     * run()是with()和let()的结合,它可以像with()一样在函数体中使用this指代该对象,也可以像let()一样为对象做判空。
     */
    val result2 = person?.run() {
        age = 20
        work(996)
        eat()
    }
    println("结果2:$result2")
    println("----------")


    /**
     * apply()和run()相似,不同的是,run()返回最后一行代码的值,而apply()返回传入的对象本身。
     */
    val result3 = person?.apply {
        age = 21
        eat()
        work(996) // 返回person对象
    }
    println("结果3:$result3")
    println("----------")

    /**
     * also()和apply()相似,不同的是,also()在函数体内用it指代该对象,而apply()在函数体中用this指代该对象。
     */
    val result4 = person?.also {
        it.age = 22
        it.eat()
        it.work(996) // 返回传入的person对象
    }
    println("结果4:$result4")
    println("----------")
}

输出:

null
null
吃饭
zhang 19 工作 996,赚59760
结果1:59760
----------
zhang 20 工作 996,赚59760
吃饭
结果2:kotlin.Unit
----------
吃饭
zhang 21 工作 996,赚59760
结果3:Person@7530d0a
----------
吃饭
zhang 22 工作 996,赚59760
结果4:Person@7530d0a
----------

kotlin常用表达式let,?:,as?,?.,!!_zhangphil的博客-CSDN博客it.todo() //函数内使用it替代object对象访问属性和方法。it.todo() //object不为null,才会执行let函数。当a不为null时,执行大括号里的语句(it肯定不为null)如果a == null ,则为 null。= null,则a.b()如果 a 不是 b,则为 null。如果a 是 b,则 a as b。当a为null时,什么都不执行。如果a==null,抛出空指针。=null时,执行a。当a==null时,执行b。https://blog.csdn.net/zhangphil/article/details/129264159

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangphil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值