Kotlin - apply、let、run、also、takeIf
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
}