Kotlin:常用标准库函数(let、run、with、apply、also)

一、let 扩展函数

Kotlin标准库函数let可用于范围确定和空检查 。当调用对象时,let执行给定的代码块并返回其最后一个表达式的结果。对象可以通过引用(默认情况下)或自定义名称在块中访问。
let扩展函数源码

let.kt文件代码

bash 复制代码
fun main() {
    println("isEmpty = $isEmpty")
    printNonNull(null)
    printNonNull("my string")
    printIfBothNonNull("First","Second")
    //下面是运行结果
    //test
    //isEmpty = false
    //Printing "null":
    //Printing "my string":
    //	my string
    //
    //First : Second

}

val isEmpty = "test".let {
    println(it)               // 2
    it.isEmpty()
}

fun printNonNull(str:String?){
    println("Printing \"$str\":")
    str?.let {
        print("\t")
        println(it)
        println()
    }
}

fun printIfBothNonNull(strOne: String?, strTwo: String?) {
    strOne?.let { firstString ->
        strTwo?.let { secondString ->
            println("$firstString : $secondString")
            println()
        }
    }
}

运行结果

二、run 扩展函数

与let类似,run是标准库中的另一个作用域函数。基本上,它做同样的事情:执行一个代码块并返回其结果。

不同的是,在内部运行对象是通过this访问的。当您想要调用对象的方法而不是将其作为参数传递时,这是很有用的。
run扩展函数源码

run.kt文件代码

bash 复制代码
fun getNullableLength(ns: String?) {
    println("for \"$ns\":")
    val resutl = ns?.run {
        println("\tis empty? " + isEmpty())
        println("\tlength = $length")
        length
    }//返回最后一行

    println("resutl = $resutl")
}

fun main(){

    getNullableLength(null)
    getNullableLength("")
    getNullableLength("some string with Kotlin")
	//下面是运行结果
    //for "null":
    //resutl = null
    //for "":
    //	is empty? true
    //	length = 0
    //resutl = 0
    //for "some string with Kotlin":
    //	is empty? false
    //	length = 23
    //resutl = 23

}

运行结果

三、with函数

With是一个非扩展函数,可以简洁地访问其参数的成员:在引用其成员时,可以省略实例名。
with函数源码

with.kt文件代码

bash 复制代码
fun main() {

    val personal = Personal("test", 20)
    val withResult = with(personal) {
        println("name = $name")
        println("age = $age")
        21
        22
    }

    println("withResult = $withResult")
    //name = test
    //age = 20
    //withResult = 22
}

class Personal(var name: String, var age: Int)

运行结果

四、apply扩展函数

apply在对象上执行代码块并返回对象本身。在块内部,对象被this引用。这个函数对于初始化对象很方便。

在实际项目用来显示列表数据的RecyclerView.Adapter里onBindViewHolder方法里使用apply或with函数较多
apply扩展函数源码

apply.kt文件代码

bash 复制代码
fun main() {

    val jake = Person()

    val stringDescription = jake.apply {
        name = "Jake"
        age = 30
        about = "Android developer"
    }.toString()

    println("stringDescription  = $stringDescription")
    //stringDescription  = Person(name=Jake, age=30, about=Android developer)

}

class Person() {
    var name: String? = null
    var age: Int = 20
    var about: String? = null
    override fun toString(): String {
        return "Person(name=$name, age=$age, about=$about)"
    }
}

运行结果

五、also扩展函数

它也像apply一样工作:它执行一个给定的块并返回被调用的对象。在块内部,对象被它引用,所以它更容易作为参数传递。这个函数可以方便地嵌入其他操作,比如在调用链中登录。
also扩展函数源码

also.kt文件代码

bash 复制代码
fun main() {
    val jake = Person2().also {
        println(it)
    }

    getPerson().also {
        it.token?.let { tempToen -> login(tempToen) }
    }
}

class Person2(
    var name: String = "test",
    var age: Int = 0,
    var about: String? = null
) {
    var token: String? = null
    override fun toString(): String {
        return "Person(name=$name, age=$age, about=$about)"
    }
}

fun login(toke: String) {

}

fun getPerson(): Person2 = Person2()

运行结果

推荐

Kotlin: 协程的四种启动模式(CoroutineStart)

相关推荐
一丝晨光2 小时前
Java、PHP、ASP、JSP、Kotlin、.NET、Go
java·kotlin·go·php·.net·jsp·asp
GEEKVIP2 小时前
手机使用技巧:8 个 Android 锁屏移除工具 [解锁 Android]
android·macos·ios·智能手机·电脑·手机·iphone
model20054 小时前
android + tflite 分类APP开发-2
android·分类·tflite
彭于晏6894 小时前
Android广播
android·java·开发语言
与衫5 小时前
掌握嵌套子查询:复杂 SQL 中 * 列的准确表列关系
android·javascript·sql
500了11 小时前
Kotlin基本知识
android·开发语言·kotlin
人工智能的苟富贵12 小时前
Android Debug Bridge(ADB)完全指南
android·adb
小雨cc5566ru17 小时前
uniapp+Android面向网络学习的时间管理工具软件 微信小程序
android·微信小程序·uni-app
bianshaopeng18 小时前
android 原生加载pdf
android·pdf
hhzz18 小时前
Linux Shell编程快速入门以及案例(Linux一键批量启动、停止、重启Jar包Shell脚本)
android·linux·jar