error în Kotlin

error aruncă imediat IllegalStateException cu un mesaj; TODO marchează cod încă nescris și aruncă NotImplementedError.

Sintaxă
fun error(message: Any): Nothing
fun TODO(): Nothing
fun TODO(reason: String): Nothing

Ce face error

error("mesaj") este o scurtătură pentru throw IllegalStateException("mesaj"). Tipul ei de rezultat este Nothing, adică funcția nu se termină niciodată normal. Datorită acestui tip o poți pune oriunde se așteaptă o valoare: după ?: sau pe ramura else a unui when.

TODO() sau TODO("motiv") se pune în locul codului pe care nu l-ai scris încă. Programul compilează, iar dacă funcția este apelată aruncă NotImplementedError cu mesajul „An operation is not implemented: motiv”. Editorul (IntelliJ, Android Studio) evidențiază aceste locuri.

Parametri

Parametru Descriere
message: Any Mesajul excepției (la error).
reason: String La TODO: ce lipsește; apare în mesajul erorii.

Ce returnează

Nu returnează niciodată (Nothing): aruncă mereu o excepție.

Exemple

Exemplul 1: error după ?: și în when

Când codul poștal nu există, error oprește funcția. Pe ramura else a lui when, error acoperă valorile neașteptate.

val coduri = mapOf("700001" to "Iași", "400001" to "Cluj-Napoca")

fun orasDupaCod(cod: String): String = coduri[cod] ?: error("Cod poștal necunoscut: $cod")

fun zi(numar: Int): String = when (numar) {
    1 -> "luni"
    2 -> "marți"
    3 -> "miercuri"
    else -> error("Zi invalidă: $numar")
}

fun main() {
    println(orasDupaCod("700001"))
    println(zi(2))
    try {
        orasDupaCod("999999")
    } catch (e: IllegalStateException) {
        println("Eroare: ${e.message}")
    }
}

Rezultat

Iași
marți
Eroare: Cod poștal necunoscut: 999999

Exemplul 2: TODO pentru o funcție încă nescrisă

Programul compilează și rulează; doar apelul funcției neterminate aruncă NotImplementedError.

fun calculeazaImpozit(venit: Double): Double = TODO("formula pentru venitul $venit")

fun main() {
    println("Pornesc calculul...")
    try {
        calculeazaImpozit(5000.0)
    } catch (e: NotImplementedError) {
        println(e.message)
    }
}

Rezultat

Pornesc calculul...
An operation is not implemented: formula pentru venitul 5000.0

Greșeli frecvente

  • Scrii cod după un apel error(...) sau TODO() în același bloc. Nu se va rula niciodată, iar compilatorul îl marchează ca „unreachable code” (cu -Werror este eroare).
  • Lași TODO() în codul trimis în producție. Este o eroare la rulare, nu doar un comentariu.
  • Prinzi NotImplementedError cu catch (e: Exception). Nu merge: NotImplementedError este un Error, nu o Exception.

Comenzi înrudite

  • check: Verifică starea programului și aruncă IllegalStateException dacă nu este cea așteptată; checkNotNull cere o valoare diferită de null.
  • require: Verifică argumentele unei funcții și aruncă IllegalArgumentException dacă nu sunt bune; requireNotNull cere o valoare diferită de null.
  • runCatching: Rulează un bloc și prinde orice excepție într-un Result; valoarea se scoate cu getOrNull, getOrElse sau getOrThrow.