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

这篇具有很好参考价值的文章主要介绍了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文章来源地址https://www.toymoban.com/news/detail-428059.html

到了这里,关于kotlin的let,with,run,apply,also,异同区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • kotlin标准函数also

    在 Kotlin 中,also 是一个标准库函数,其作用是将一个对象作为参数传递给 Lambda 表达式,并返回该对象本身 。语法如下: 使用 also 可以使代码更加简洁,常用于一系列需要对同一个对象进行多次操作的场景。例如: 上述代码首先输出字符串的长度,然后将其赋值给 length 变

    2024年02月06日
    浏览(45)
  • Kotlin判断null比较let布尔值Boolean

    data.count != null data.count!! true false false kotlin,null let expression_zhangphil的博客-CSDN博客 当a不为null时,执行大括号里的语句(it肯定不为null)如果a == null ,则为 null。= null,则a.b()如果 a 不是 b,则为 null。当a==null时,执行b。当a不为null时,执行大括号里的语句(it肯定不为null)如果a

    2024年02月10日
    浏览(52)
  • 【第三阶段】kotlin中使用带let的安全调用

    let常常和?.配合使用,如果前面的对象为null,let不执行,能够执行到let里面 对象一定不为null 1.不为null 执行结果 2.为“ ” 执行结果 3.为null 执行结果

    2024年02月12日
    浏览(40)
  • AWS出现You must specify a region. You can also configure your region by running “aws configure“解决方法

    使用aws的命令时 出现如下错误 最主要的错误提示如下: 其实这条命令已经告诉你具体的操作了 根据命令提示输入: aws configure 主要的配置要求,具体如下:

    2023年04月09日
    浏览(42)
  • let和var区别 (最全)

    1、var是函数作用域,let是块作用域 2、var存在声明提升,let没有声明提升,但是有“暂时性死区”-JS引擎会注意到出现在块后面的let声明,在声明前直接使用会抛出ReferenceError, 3、全局作用域下,var声明的变量挂载在window,let不会 4、在for循环中使用let, let出现直线,for循环定

    2024年01月16日
    浏览(37)
  • const、let、var区别

    let和const是ES6新增的声明变量的,之前声明变量的是var。 ES6 新增了 let 命令,用来声明变量。它的用法类似于 var ,但是所声明的变量,只在 let 命令所在的代码块内有效。 上面代码在代码块之中,分别用 let 和 var 声明了两个变量。然后在代码块之外调用这两个

    2024年02月08日
    浏览(42)
  • 【Kotlin】DSL 领域特定语言 ( apply 标准库函数分析 | 普通匿名函数 | 扩展匿名函数 | 泛型扩展匿名函数 )

    本章总结 : 读懂 apply 标准库函数 核心是其 block: T.() - Unit 参数 , 这是 泛型扩展匿名函数 ; 泛型扩展匿名函数 T.() - Unit 演变路径 : 普通匿名函数 : () - Unit , 这个函数 参数 和 返回值 都为空 ; 扩展匿名函数 : String.() - Unit , 这个函数 是 为 具体的 String 类型定义的扩展函数 ; 泛型

    2023年04月09日
    浏览(37)
  • js let和const区别

    在JavaScript中,let和const的区别主要体现在以下几个方面: 变量的可变性:使用let声明的变量可以被改变,无论是值还是类型都可以改变。而const声明的常量则不可以改变,一旦声明并初始化后,它的值就不能再改变。 声明的块级作用域:let和const都只在声明所在的块级作用域

    2024年01月19日
    浏览(85)
  • var、let、const 之间的区别

    在 ES5 中 , 顶层对象的属性和全局变量是等价的 , 用 var 声明的变量既是全局变量 , 也是顶层变量。 注意 : 顶层对象 , 在浏览器环境指的是 window 对 象 , 在 Node 指的是 global 对象 使用 var 声明的变量存在 变量提升 的情况 在编译阶段 , 编译器会将其变成以下执行 使用 var , 能够

    2024年02月03日
    浏览(37)
  • JavaScript 中 let 和 var 的区别

    首先,let 和 var 都是用于声明变量的,在老版 JavaScript 中也许你会见到 var 方式来声明变量,而现如今几乎都是使用 let 进行声明,接下来看看这两个之间的区别。 1、作用域 var var 声明的变量在函数内部有效,如果在函数内部使用 var 声明一个变量,那么该变量

    2024年02月12日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包