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)

相关推荐
sun0077008 小时前
android ndk编译valgrind
android
AI视觉网奇10 小时前
android studio 断点无效
android·ide·android studio
jiaxi的天空10 小时前
android studio gradle 访问不了
android·ide·android studio
No Silver Bullet11 小时前
android组包时会把从maven私服获取的包下载到本地吗
android
catchadmin11 小时前
PHP serialize 序列化完全指南
android·开发语言·php
tangweiguo0305198712 小时前
Kable使用指南:Android BLE开发的现代化解决方案
android·kotlin
00后程序员张14 小时前
iOS App 混淆与资源保护:iOS配置文件加密、ipa文件安全、代码与多媒体资源防护全流程指南
android·安全·ios·小程序·uni-app·cocoa·iphone
柳岸风16 小时前
Android Studio Meerkat | 2024.3.1 Gradle Tasks不展示
android·ide·android studio
编程乐学16 小时前
安卓原创--基于 Android 开发的菜单管理系统
android
whatever who cares18 小时前
android中ViewModel 和 onSaveInstanceState 的最佳使用方法
android