Výnimky (exceptions) nám umožňujú riešiť chybové stavy v programe. V Kotline používame bloky try, catch a finally:
fun main() {
try {
val cislo = readln().toInt()
println("Cislo: $cislo")
} catch (e: NumberFormatException) {
println("Zadane cislo nie je platne!")
}
}
Môžeme odchytiť viacero typov výnimiek:
fun main() {
try {
val a = readln().toInt()
val b = readln().toInt()
println(a / b)
} catch (e: ArithmeticException) {
println("Delenie nulou!")
} catch (e: NumberFormatException) {
println("Zadane cislo nie je platne!")
}
}
Blok finally sa vykoná vždy, či už výnimka nastala alebo nie:
fun main() {
try {
val cislo = readln().toInt()
println(cislo)
} catch (e: NumberFormatException) {
println("Chyba!")
} finally {
println("Hotovo")
}
}
V Kotline môže try-catch vrátiť hodnotu:
fun main() {
val cislo: Int? = try {
readln().toInt()
} catch (e: NumberFormatException) {
null
}
println(cislo) // cislo alebo null
}
Výnimky vyhadzujeme pomocou kľúčového slova throw:
fun checkAge(age: Int) {
if (age < 0) {
throw IllegalArgumentException("Vek nemoze byt zaporny!")
}
println("Vek: $age")
}
fun main() {
checkAge(-5) // vyhodi vynimku
}
Výnimky by sme mali používať len na ozajstné chyby, nie na bežné riadenie programu.
Načítaj číslo zo vstupu a pri neplatnej hodnote odchyť NumberFormatException.
Napíš bezpečné delenie dvoch čísel s odchytením delenia nulou a blokom finally.
Vytvor funkciu, ktorá pomocou throw odmietne záporný vek.