Блок finally в Kotlin
Иногда нужно выполнить код и при успехе, и при
ошибке: вывести итог, сбросить флаг, напечатать
разделитель. Для этого после catch
добавляют блок finally. Он запускается
всегда, когда завершилась пара try-catch.
try {
// risky code
} catch (e: SomeException) {
// handle
} finally {
// always runs
}
Обратимся к несуществующему индексу списка
и в finally выведем количество элементов:
val nums = listOf(10, 20, 30)
try {
println(nums[9])
} catch (e: IndexOutOfBoundsException) {
println("bad index")
} finally {
println(nums.size)
}
Если исключения не было, catch пропускается,
но finally все равно выполнится:
val nums = listOf(4, 5, 6)
try {
println(nums[0])
} catch (e: IndexOutOfBoundsException) {
println("bad index")
} finally {
println("end")
}
Блок finally может стоять и без catch,
если исключение уходит выше, но завершающий
шаг все равно нужен. В учебных задачах чаще
используют полную форму try-catch-finally.
Даны a и b. В try выведите
a / b. При делении на ноль выведите
"error" в catch. В finally
выведите "finished".
Дана строка line. В try выведите
line.toInt(). При NumberFormatException
выведите "nan". В finally выведите
длину строки line.