Sobes.tech
Middle

Ako používať uzavreté triedy na modelovanie hierarchií v Kotlin?

sobes.tech AI

Odpoveď od AI

Zapečačené triedy (sealed classes) sa používajú na reprezentáciu obmedzených hierarchií dedičnosti, kde sú všetky možné podtriedy známe v čase kompilácie.

Hlavné vlastnosti:

  • Všetky priame podtriedy musia byť v rovnakom súbore ako zapečatená trieda (pred Kotlin 1.5). Od Kotlin 1.5 môžu byť v akomkoľvek súbore tej istej kompilácie.
  • Podtriedy zapečatenej triedy môžu byť bežné triedy, data triedy, deklarácie object alebo iné zapečatené triedy.
  • Konštruktor zapečatenej triedy je predvolene súkromný; iné modifikátory (public, protected, internal) nie sú povolené.
  • Umožňujú použiť úplnú (exhaustive) analýzu v when výrazoch, čo zaručuje spracovanie všetkých možných variantov a odstraňuje potrebu else vetvy.

Príklad použitia na modelovanie stavu používateľského rozhrania:

sealed class UiState {
    object Loading : UiState() // Stav načítania
    data class Success(val data: String) : UiState() // Úspešné načítanie dát
    data class Error(val message: String) : UiState() // Chyba
}

Použitie v when výraze:

fun handleUiState(state: UiState): String {
    return when (state) {
        UiState.Loading -> "Načítava sa dáta..."
        is UiState.Success -> "Dáta úspešne načítané: ${state.data}"
        is UiState.Error -> "Chyba: ${state.message}"
    }
}

Výhody:

  • Bezpečnosť typu: kompilátor kontroluje, či sú spracované všetky možné podtriedy.
  • Čitateľnosť: jasne ukazuje, aké varianty dát alebo stavov môžu existovať.
  • Pohodlie: zjednodušuje prácu s when výrokmi.