Чтение результата в Kotlin
После проверок или цепочки преобразований из Result
нужно получить обычное значение. Для этого есть три
типичных способа с разным отношением к неудаче.
Функция getOrNull отдает значение при успехе и null,
если внутри лежит ошибка. Это мягкий вариант без
исключений:
fun loadUnits(text: String): Result<Int> {
return runCatching { text.toInt() }
}
fun main() {
val good = loadUnits("5")
val bad = loadUnits("five")
println(good.getOrNull())
println(bad.getOrNull())
}
Функция getOrElse принимает лямбду и вызывает ее только
при неудаче. Возвращаемое из лямбды значение подставляется
вместо отсутствующего успеха:
fun loadUnits(text: String): Result<Int> {
return runCatching { text.toInt() }
}
fun main() {
val missing = loadUnits("n/a")
val units = missing.getOrElse { 0 }
println(units)
}
Функция getOrThrow возвращает значение при успехе и снова
бросает сохраненное исключение, если результат неудачный.
Так возвращаются к привычной модели «либо значение, либо
сбой наружу»:
fun loadUnits(text: String): Result<Int> {
return runCatching { text.toInt() }
}
fun main() {
val ok = loadUnits("12")
println(ok.getOrThrow())
val broken = loadUnits("12o")
println(broken.getOrThrow())
}
Строка "7" и строка "?" проходят через
обертку с toInt. Для каждой получите число
или null мягким способом и выведите оба
ответа через пробел.
При разборе "abc" в число возьмите запасное
значение 100 через лямбду при неудаче.
При разборе "9" выведите число жестким
способом, который бросает исключение при сбое.
Напечатайте оба итога на отдельных строках.