IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Kotlin作用域操作符 -> 正文阅读

[移动开发]Kotlin作用域操作符

作用域操作符使用与操作所有的对象

其中包括?:

let与run都会返回闭包的执行结果,区别在于let有闭包参数,而run没有闭包参数

let {...}??返回闭包的执行结果,有具体参数,或者用it访问

run {...} 返回闭包的执行结果,使用this访问或者可以省略this(调用方比较简单可以采用)

also与apply都不返回闭包的执行结果,区别在于also有闭包参数,而apply没有闭包参数

also {...}?不返回闭包的执行结果,返回调用方本身,有具体参数,或者用it访问

apply {...}?不返回闭包的执行结果,返回调用方本身,使用this访问或者可以省略this(调用方比较简单可以采用)

with(T) {...}? 返回闭包的执行结果,使用this访问或者可以省略this

关于要使用it访问方便还是this或者省略this方便可以参考作用域函数 - Kotlin 语言中文站

代码实现:

/**
 * 作用域函数
 * run {...}
 * with(T) {...}
 * let {...}
 * apply {...}
 * also {...}
 */
fun main() {
    val user = User("chenqz")
    //let与run都会返回闭包的执行结果,区别在于let有闭包参数,而run没有闭包参数
    val letResult: String = user.let { user -> "let::${user.javaClass}" }
    println(letResult)
    //只有一个参数使用it替代
    val let2Result: String = user.let { "let2::${it.javaClass}" }
    println(let2Result)
    val runResult: String = user.run { "run::${this.javaClass}" }
    println(runResult)
    //also与apply都不返回闭包的执行结果,区别在于also有闭包参数,而apply没有闭包参数
    user.also {
        println("also::${it.javaClass}")
    }.apply {
        println("apply::${this.javaClass}")
    }.name = "hello"
    val nameX = with(user) {
        name = "x"
        return@with name
    }
    println("nameX:" + nameX)

    //takeIf的闭包会返回一个判断结果,为false时,takeIf函数会返回空
    //takeUnless与takeIf刚好相反,闭包的判断结果,为true时,函数会返回空
    //?:相当于else
    user.takeIf { it.name.length > 0 }?.also { println("姓名为${it.name}") } ?: println("姓名为空")
    user.takeUnless { it.name.length > 0 }?.also { println("姓名为空") } ?: println("姓名为${user.name}")
}
data class User(var name: String)

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-22 14:48:20  更:2021-09-22 14:50:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:34:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码