Kotlin之let,run,apply,with的使用

一,let

可以用来映射可空值(如果非空的话)–>Kotlin的可空性,空安全

fun testLet() {
    var data: String? = "abcde"
    val sub = data?.let {
        it.substring(1)
        println(data)
    }
    println(sub)

    val list: MutableList<String> = mutableListOf("A","B","C")
    val change = list.let {
        it.add("D")
        it.add("E")
        it.size
    }
    println("list = $list")
    println("change = $change")
}

let可以配合可空性 “?” 来使用,如果data=null 则不执行let内部代码,如果有返回值则直接返回null
在let中,用it表示引用对象,并可调用其方法,it不可省略。
返回值是语句块的最后一行的返回类型,若最后一行语句无返回值,则整个let语句块也无返回值

二,apply

fun testApply() = StringBuilder().apply {
    for (letter in 'A'..'Z') {
        append(letter)
    }
    append("\nNow I konw this alphabet")
    length
}

fun main(args: Array<String>){
    println(testApply())
}

在apply中,用this代表当前引用对象,并且调用其方法时,this可省略。区别于let中必须使用it
apply必有返回值,且返回值是当前引用对象

三,run

fun testRun(){
    val data: String? = "123456"
    val result = data.run {
        this?.substring(2)
//        this?.length
    }
    println(result)
    val list: MutableList<String> = mutableListOf("A", "B", "C")
    val change = list.run {
        add("D")
        add("E")
        this.add("F")
        size
    }
    println("list = $list")
    println("change = $change")
}

在run中,用this代表当前引用对象,并且调用其方法时,this可省略但是在第一个表示String的时候却不能省略,看来是要分对象的。
返回值是语句块的最后一行的返回类型,若最后一行语句无返回值,则整个run语句块也无返回值

在android中,我们常在run中初始化一些数据。

四,with

fun testWith() {
    val with = with(StringBuilder()) {
        for (letter in 'A'..'Z') {
            append(letter)
        }
        append("\nNow I konw this alphabet")
        toString()
        //length
    }
    println(with)
}

fun main(args: Array<String>) {
    testWith()
}

在with中,用this代表当前引用对象,并且调用其方法时,this可省略。
返回值是语句块的最后一行的返回类型,若最后一行语句无返回值,则整个run语句块也无返回值

五,总结

从上面看几个语法糖的用法只有一些细微的区别,只要我们记住差别,具体怎么用就看个人爱好了。

示例代码:https://github.com/wangxp423/ExerciseKt

kotlin之Android项目实战

猜你喜欢

转载自blog.csdn.net/wangxp423/article/details/80764790
今日推荐