fallback

infix inline fun <T : Any> T?.fallback(none: (NullPointerException) -> T = ::rethrow): T

Syntax-sugar for null-case of nullfold that throws a NullPointerException by default.

This mainly exists for the scenario where you would use a block and/or still want to continue function chaining.

// Before -- awkward run block / breaks function chaining
val len = result?.length ?: run {
state.update { it.copy(error = "Result was null") }
return@someFunction
}
println(len.toString())

// Before -- awkward brackets to continue function chain
val len = (result?.length ?: run {
state.update { it.copy(error = "Result was null") }
return@run -1
}).let { println(it.toString()) }

// After
result?.length.fallback {
state.update { it.copy(error = "Result was null") }
return@someFunction // or return@fallback -1
}.let { println(it.toString()) }