Kotlin

10分钟吃透kotlin语法let apply also run

2022-02-28  本文已影响0人  jalen2024

结论先行

区别 返回值 内部操作
let 最后一行 it
apply 调用者本身 this
also 调用者本身 it
run 最后一行 this或省略
class Person(var name: String, var age: Int) {
    override fun toString(): String {
        return "[姓名:$name ~ 年龄:$age]"
    }
}

let


//原始数据[姓名:张三 ~ 年龄:20]
//修改后数据[姓名:张三 ~ 年龄:30]
//二次let数据kotlin.Unit
fun test1(): Unit {
    val person = Person("张三", 20)
    val result = person.let {
        println("原始数据${it.toString()}")
        it.age = 30
        println("修改后数据${it.toString()}")
        it.age = 40
    }.let {
        println("二次let数据${it.toString()}")
    }
    return result
}

//原始数据[姓名:张三 ~ 年龄:20]
//修改后数据[姓名:张三 ~ 年龄:30]
//二次let数据[姓名:张三 ~ 年龄:40]

fun test01(): Person {
    val person = Person("张三", 20)
    val result = person.let {
        println("原始数据${it.toString()}")
        it.age = 30
        println("修改后数据${it.toString()}")
        it.age = 40
        it
    }.let {
        println("二次let数据${it.toString()}")
        it
    }
    return result
}

apply


//原始数据[姓名:张三 ~ 年龄:20]
//修改后数据[姓名:张三 ~ 年龄:30]
//二次apply数据[姓名:张三 ~ 年龄:40]

fun test2(): Person {
    val person = Person("张三", 20)
    val result = person.apply {
        println("原始数据${this.toString()}")
        this.age = 30
        println("修改后数据${this.toString()}")
        this.age = 40
    }.apply {
        println("二次apply数据${this.toString()}")
    }
    return result
}

also

//原始数据[姓名:张三 ~ 年龄:20]
//修改后数据[姓名:张三 ~ 年龄:30]
//二次also数据[姓名:张三 ~ 年龄:40]

fun test3(): Person {
    val person = Person("张三", 20)
    val result = person.also {
        println("原始数据${it.toString()}")
        it.age = 30
        println("修改后数据${it.toString()}")
        it.age = 40
    }.also {
        println("二次also数据${it.toString()}")
    }
    return result
}

run

//原始数据[姓名:张三 ~ 年龄:20]
//修改后数据[姓名:张三 ~ 年龄:30]
//二次also数据kotlin.Unit

fun test4(): Unit {
    val person = Person("张三", 20)
    val result = person.run {
        println("原始数据${toString()}")
        age = 30
        println("修改后数据${toString()}")
        age = 40
    }.run {
        println("二次also数据${toString()}")
    }
    return result
}


//原始数据[姓名:张三 ~ 年龄:20]
//修改后数据[姓名:张三 ~ 年龄:30]
//二次also数据[姓名:张三 ~ 年龄:40]
fun test04(): Person {
    val person = Person("张三", 20)
    val result = person.run {
        println("原始数据${toString()}")
        age = 30
        println("修改后数据${toString()}")
        age = 40
        this
    }.run {
        println("二次also数据${toString()}")
        this
    }
    return result
}

takeIf

takeIf 判断条件成立 则执行

//年龄大于19岁:[姓名:张三 ~ 年龄:20]
//takeIf最后一行返回:[姓名:张三 ~ 年龄:40]
fun test5() {
    val person = Person("张三", 20)
    person.takeIf { it.age > 19 }.let {
        println("年龄大于19岁:${it.toString()}")
        it!!.age = 40
        it
    }.let {
        println("takeIf最后一行返回:${it.toString()}")
    }

takeUnless

takeUnless 判断条件不成立 则执行

//年龄 不是 大于21岁:[姓名:张三 ~ 年龄:20]
//takeUnless最后一行返回:[姓名:张三 ~ 年龄:40]
fun test05() {
    val person = Person("张三", 20)
    person.takeUnless { it.age > 21 }.let {
        println("年龄 不是 大于21岁:${it.toString()}")
        it!!.age = 40
        it
    }.let {
        println("takeUnless最后一行返回:${it.toString()}")
    }
}
上一篇下一篇

猜你喜欢

热点阅读