Sobes.tech
Middle

Kotlinде иерархияларды моделдөө үчүн жабык класстарды кантип колдонуу керек?

sobes.tech AI

AIден жооп

Жабык класстар (sealed classes) чектелген мурасий иерархияларды көрсөтүү үчүн колдонулат, анда бардык мүмкүн болгон подкласстар компиляция учурунда белгилүү болот.

Негизги өзгөчөлүктөрү:

  • Бардык түздөн-түз подкласстар ошол эле файлда болушу керек (Kotlin 1.5 чейин). Kotlin 1.5тен кийин, алар кез келген файлда болушу мүмкүн ошол эле компиляцияда.
  • Жабык класстын подкласстары жөнөкөй класстар, data-класстар, object декларациялары же башка жабык класстар болушу мүмкүн.
  • Жабык класстын конструктору алдын ала жеке; башка модификаторлор (public, protected, internal) уруксат берилбейт.
  • When билдирүүлөрүндө толук (exhaustive) анализ жүргүзүүгө мүмкүндүк берет, бул бардык мүмкүн болгон варианттарды иштетүүнү камсыздайт жана else-тармактын кереги жок кылат.

Колдонуучу интерфейсинин абалын моделдөө үчүн мисал:

sealed class UiState {
    object Loading : UiState() // Жүктөө абалы
    data class Success(val data: String) : UiState() // Ийгиликтүү маалымат алуу
    data class Error(val message: String) : UiState() // Ката
}

When билдирүүсүндө колдонуу:

fun handleUiState(state: UiState): String {
    return when (state) {
        UiState.Loading -> "Маалыматтар жүктөлүүдө..."
        is UiState.Success -> "Маалыматтар ийгиликтүү жүктөлдү: ${state.data}"
        is UiState.Error -> "Ката: ${state.message}"
    }
}

Артыкчылыктары:

  • Типтин коопсуздугу: компилятор бардык мүмкүн болгон подкласстар иштетилгенин текшерет.
  • Ачык-айкындуулук: кайсы маалымат же абал түрлөрү болушу мүмкүн экенин так көрсөтөт.
  • Ыңгайлуулук: when билдирүүлөрү менен иштөөнү жеңилдетет.