enum class používame pre hodnoty, ktorých možný počet je pevne daný. Namiesto voľného textu, napríklad "PONDELOK", tak môžeme použiť bezpečný typ Den, ktorý si sami vytvoríme.
enum class Den {
PONDELOK,
UTOROK,
STREDA,
STVRTOK,
PIATOK,
SOBOTA,
NEDELA
}
fun main() {
val dnes = Den.PIATOK
println(dnes) // PIATOK
}
Enumy sa dobre kombinujú s podmienkou when. Keď spracujeme všetky hodnoty enumu, nepotrebujeme písať vetvu else.
enum class StavObjednavky {
NOVA,
ZAPLATENA,
ODOSLANA,
DORUCENA
}
fun vypisStav(stav: StavObjednavky) = when (stav) {
StavObjednavky.NOVA -> "Objednávka čaká na platbu"
StavObjednavky.ZAPLATENA -> "Objednávka je zaplatená"
StavObjednavky.ODOSLANA -> "Objednávka je na ceste"
StavObjednavky.DORUCENA -> "Objednávka bola doručená"
}
fun main() {
println(vypisStav(StavObjednavky.ODOSLANA))
}
Každá hodnota enumu môže mať vlastné údaje. V nasledujúcom príklade má nápoj uloženú cenu:
enum class Napoj(val cena: Double) {
VODA(1.20),
DZUS(2.50),
KAVA(1.80)
}
fun main() {
val napoj = Napoj.KAVA
println("${napoj.name}: ${napoj.cena} EUR")
}
Všetky hodnoty enumu získame funkciou entries:
enum class Farba {
CERVENA,
MODRA,
ZELENA
}
fun main() {
for (farba in Farba.entries) {
println(farba)
}
}
Názov konkrétnej hodnoty získame cez
name. Číselné poradie hodnoty začínajúce od nuly získame cezordinal, ale na logiku programu je lepšie vytvoriť vlastný atribút.
Vytvor enum DenVTyzdni so všetkými dňami. Pomocou when vypíš Pracovný deň alebo Víkend.
Vytvor enum Priorita s hodnotami NIZKA, STREDNA a VYSOKA. Každej hodnote priraď číselnú váhu a vypíš ju pre zvolenú prioritu.
Vytvor enum VelkostTrička s hodnotami S, M, L a XL. Vypíš všetky dostupné veľkosti pomocou VelkostTrička.entries.