Kotlini tühjad tüübid

Joel Edenberg

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öö.