Be careful with Kotlin Scope Functions
Jan 4, 2021
The Curious Case of ?.let {} ?: run {}
Try this code :
fun main() {
val theCase: Int? = 1
theCase?.let {
fun1()
fun2()
} ?: run {
funError()
}
}
fun fun1() {
println("fun1")
}
fun fun2(): Unit? {
// return println("fun2")
return null
}
fun funError(){
println("funError")
}
The result :
fun1
funError
So the funError() was called - but it shouldn’t?
Play with the code and change the fun2() to :
fun fun2(): Unit? {
return println("fun2")
// return null
}
Generally speaking, funError() should be called only when (?)
val theCase: Int? = null
Not really …
You can read more about it (and many others) in details here :