Kui Java's on meetodi tagastustüübiks, mis mitte midagi ei tagasta, tühitüüp void
, siis Kotlinis
on tühje tagastustüüpe kaks - Unit
ja Nothing
.
Unit
- Sisaldab ainult 1 väärtust, mis indikeerib, et meetod lõpetas oma töö edukalt. Seega mingit muud lisainfot tagastada ei ole võimalik
Nothing
- Ei sisalda ühtegi väärtust. Seega meetod ei saa tagastada, et lõpetas oma töö edukalt. Näiteks meetodid, mis viskavad alati vea või lähevad lõpmatusse tsükklisse.
Nothing tüübi kasutus
Tagastustüübi mittemääramise korral kasutatakse vaikimisi Unit
tüüpi. Seega järgmises koodis oleks muutuja vastus
tüübiks Any
val vastus: Any = if (timeHasPassed()) {
42 // tagastustüüp Int
} else {
viga("Ei ole valmis") // tagastustüüp Unit
}
fun viga(message: String) {
throw IllegalStateException(message)
}
Kuna vastus
tüübiks tuleb valida tüüp, mis sobib mõlemale võimalikule väärtusele, siis ainus sobilik tüüp on Any
.
Kui aga muuta koodi nii, et meetod viga()
tagastab Nothing
tüübi, siis saame
val vastus: Int = if (timeHasPassed()) {
42 // tagastustüüp Int
} else {
viga("Ei ole valmis") // tagastustüüp Nothing
}
fun viga(message: String): Nothing {
throw IllegalStateException(message)
}
Kuna Nothing
on kõigi teiste tüübide alamklass, siis saab vastuse tüübina kasutada kohe Int
tüüpi. Kompilaator teab, et juhul kui käivitatakse
meetod viga()
siis katkestatakse programmi töö.