Sobes.tech
Middle

Чӣ гуна истифода бурдани синфҳои пӯшида барои моделсозии низомҳо дар Kotlin?

sobes.tech AI

Ҷавоб аз AI

Затворен класи (sealed classes) барои намояндагии ҳиерархияҳои маҳдудшудаи насле, ки дар он ҳама навъҳои эҳтимолӣ дар вақти компилятсия маълуманд.

Хусусиятҳои асосӣ:

  • Ҳамаи навъҳои мустақим бояд дар ҳамон файл бо класи затворшуда ҷойгир бошанд (пеш аз Kotlin 1.5). Аз Kotlin 1.5, онҳо метавонанд дар ҳар файле дар ҳамон компилятсия бошанд.
  • Навъҳои класи затворшуда метавонанд класи оддӣ, data-классҳо, эълонҳои object ё дигар класи затворшуда бошанд.
  • Конструктори класи затворшуда ба таври пешфарз хусусӣ аст; дигар модификаторҳо (public, protected, internal) иҷозат дода намешаванд.
  • Имкон медиҳад, ки таҳлили пурра (exhaustive) дар изразҳои when истифода шавад, ки кафолат медиҳад, ки ҳамаи вариантҳо коркард мешаванд ва ниёз ба шохаи 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 содда мекунад.