Функция с исключением в Kotlin
Правила для параметров часто удобно держать внутри функции. Если значение не подходит, функция выбрасывает исключение, а вызывающий код решает, что показать пользователю.
Функция возвращает элемент списка по индексу
только для неотрицательного индекса. Иначе -
IllegalArgumentException:
fun getAt(list: List<Int>, index: Int): Int {
if (index < 0) {
throw IllegalArgumentException("negative index")
}
return list[index]
}
Вызов оборачивают в try-catch, чтобы
отловить и неверный аргумент, и выход за
границы списка:
val data = listOf(10, 20, 30)
try {
println(getAt(data, -1))
} catch (e: IllegalArgumentException) {
println("bad arg")
} catch (e: IndexOutOfBoundsException) {
println("out of list")
}
Та же схема работает для проверки диапазона
возраста или процента. Несколько catch
подряд позволяют развести сообщения для
разных типов сбоя в одном месте вызова.
fun percent(value: Int) {
if (value < 0 || value > 100) {
throw IllegalArgumentException("out of range")
}
println("$value%")
}
fun main() {
try {
percent(150)
} catch (e: IllegalArgumentException) {
println("invalid percent")
}
}
Создайте функцию ensureNonNegative с
параметром n. Для n < 0
выбросьте IllegalArgumentException
с сообщением "negative". Иначе
верните n.
Создайте функцию divide с двумя
целыми параметрами. При b == 0
выбросьте ArithmeticException.
Иначе верните частное. В main вызовите
ее с нулевым делителем в try-catch
и выведите "fail" при ошибке.
Создайте функцию charAtSafe со строкой
и индексом. При отрицательном индексе
выбросьте IllegalArgumentException.
Иначе верните символ строки. Обработайте
вызов с большим индексом через
IndexOutOfBoundsException.