Sobes.tech
Middle

Kas ir sealed klases un kāds ir to mērķis?

sobes.tech AI

Atbilde no AI

Sealed-klases irrieģē ierobežotas manto hierarhijas. Tās tiek izmantotas ierobežotam iespējamā stāvokļu vai vērtību kopam pārstāvēt.

Galvenās īpašības un mērķis:

  • Ierobežota hierarhija: Sealed-klases mantinieki jādeklarē tajā pašā failā vai iekšā sealed-klasē pirms Kotlin 1.5. No versijas 1.5 šis ierobežojums ir mazināts: mantinieki var būt jebkurā tajā pašā paketē esošajā failā.
  • Stāvokļiem ar enum-klasēm: Atšķirībā no enum-klasēm, katrs sealed-klases mantinieks var būt ar savu stāvokli un uzvedību.
  • Pilnīgs when: Kompilators nodrošina, ka when bloks, kas paredzēts sealed-klases instancēm, ir pilnīgs (visi gadījumi ir iekļauti), ja nav norādīta else daļa.

Piemērs:

sealed class Result<out T> {
    data class Success<out T>(val data: T) : Result<T>()
    data class Error(val exception: Exception) : Result<Nothing>()
    object Loading : Result<Nothing>() // Vienīgais instances
}

fun processResult(result: Result<String>) {
    when (result) {
        is Result.Success -> {
            // Veiksmīga rezultāta apstrāde
            println("Data: ${result.data}")
        }
        is Result.Error -> {
            // Kļūdas apstrāde
            println("Error: ${result.exception.message}")
        }
        Result.Loading -> {
            // Ielādes stāvokļa apstrāde
            println("Loading data...")
        }
        // `else` daļa nav nepieciešama, jo visi apakšklases
        // Result ir apstrādātas ar kompilatoru
    }
}

Mērķis:

  • Droša stāvokļu attēlošana: uzticami attēlo galīgo iespējamā stāvokļu skaitu, piemēram, tīkla pieprasījuma rezultātu (Success, Error, Loading).
  • Koda lasāmības uzlabošana: padara kodu skaidrāku, apstrādājot dažādus gadījumus.
  • when izteikumu drošības uzlabošana: kompilators palīdz izvairīties no neapstrādātiem gadījumiem.
  • Aizstāj enum-klases ar stāvokļiem: kad nepieciešams saistīt datus ar konkrētiem "variantiem".

Tādējādi, sealed-klases nodrošina elastīgu veidu, kā modelēt galīgos vērtību kopumus ar iespēju glabāt specifiskus datus katrai vērtībai, vienlaikus nodrošinot drošību un skaidrību šo vērtību apstrādē when izteiksmēs.