apply:匿名函式執行完畢後回傳目前的 receiver
package examples

fun main() {
    plus(1,2).apply {
        println(this) // 3
        println(toDouble()) // 3.0
    }
}

fun plus(a: Int, b: Int): Int {
    return a + b
}

let:將 receiver 傳入你提供的 lambda
package examples

fun main() {
    plus(1,2)?.let { println(it) }
}

fun plus(a: Int, b: Int): Int? {
    return a + b
}

run:傳遞執行後的值
package examples

fun main() {
    val grade = 59
    grade.run(::isPassed)
            .run(::comment)
            .run(::println)
}

fun comment(passed:Boolean):String {
    if (passed) {
        return "Good job"
    } else {
        return "Oh no"
    }
}

fun isPassed(grade: Int): Boolean {
    return grade >= 60
}

also:類似 let,但帶有更多副作用
package examples

fun main() {
    val grade = 59
    grade.run(::isPassed)
            .run{comment(this, "QQ")}
            .also(::println)
        .also{ println("$it again") }
}

fun comment(passed:Boolean, suffix:String):String {
    if (passed) {
        return "Good job$suffix"
    } else {
        return "Oh no$suffix"
    }
}

fun isPassed(grade: Int): Boolean {
    return grade >= 60
}

takeIf:提供條件判斷來決定是否執行
package examples

fun main() {
    60.takeIf { isPassed(it) }?.run { println("Good Job") }
}

fun isPassed(grade: Int): Boolean {
    return grade >= 60
}


Tags:

Updated: