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(...)sauTODO()în același bloc. Nu se va rula niciodată, iar compilatorul îl marchează ca „unreachable code” (cu-Werroreste 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:NotImplementedErroreste unError, nu oException.
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.