(отредактировано для ясности)
Я продолжаю писать (if (x) f() else null) ?: (if (y) g() else null) ?: (if (z) h() else null)
и тому подобное, и я уверен, что я не единственный ץ
Я всегда обращаюсь к функции, подобной valueIf
, определенной ниже (которая равна takeIf
с порядком обращения параметров, поэтому значение лениво), что позволило бы мне написать код, подобный getViewEventType2()
вместо кода, подобного getViewEventType1()
(оба уточняются ниже).
Есть ли идиома, по которой я скучаю?
(Кроме того, умеет ли компилятор работать с такими функциями или я должен бояться создавать слишком много временных замыканий?)
private fun getViewEventType1(): String? {
return if (intent.action == "android.intent.action.VIEW") {
intent.data?.pathSegments?.let {
if (it.size == 3 && it[0] == "app" && it[1] == "event") it[2]
else null
}
} else null
}
private fun getViewEventType2(): String? {
return valueIf(intent.action == "android.intent.action.VIEW") {
intent.data?.pathSegments?.let {
valueIf(it.size == 3 && it[0] == "app" && it[1] == "event") { it[2] }
}
}
}
inline fun <T> valueIf(condition: Boolean, func: () -> T?) =
if (condition) func() else null