Преобразование результата в Kotlin
Функция map на Result применяет лямбду только к
успешному значению. Неудача проходит дальше без изменений,
новая лямбда для нее не вызывается:
fun main() {
val base = Result.success(4)
val squared = base.map { it * it }
println(squared)
val failed = Result.failure<Int>(IllegalArgumentException("bad"))
val skipped = failed.map { it + 1 }
println(skipped)
}
Цепочку удобно строить после обертки над рискованным шагом: сначала получаем число, затем считаем производную величину в том же стиле:
fun main() {
val raw = "6"
val label = runCatching { raw.toInt() }
.map { "item-$it" }
println(label)
}
Функция mapCatching работает как map, но ловит
исключение внутри лямбды преобразования. Сбой в блоке
снова становится неудачным Result, а не летит
наружу:
fun main() {
val ok = Result.success(10)
val safe = ok.mapCatching { it / 2 }
println(safe)
val zero = Result.success(0)
val trap = zero.mapCatching { 100 / it }
println(trap)
}
Из строки "15" получите Result с числом,
затем постройте строку "code-15" в цепочке
без if. Выведите итоговый Result.
Успешный Result с числом 8 пропустите
через шаг, где из строки "8" берется символ
по индексу 20. Покажите, что сбой остается
внутри Result, и выведите объект.