sealed class va sealed interface Kotlin-da cheklangan tur ierarxiyasi mexanizmlari bo'lib, bunda barcha mumkin bo'lgan pastki sinflar kompilyatsiya bosqichida ma'lum bo'ladi. Oddiy abstrakt sinflardan farqli o'laroq, sealed class when ifodasida barcha variantlarni to'liq qayta ishlashni kafolatlaydi. JetBrains Kotlin Language Guide (2026) hujjatiga ko'ra, sealed turlar Kotlin loyihalarida holatlar, UI ekranlari va natija turlarini modellashtirish uchun asos hisoblanadi.
Asosiy ma'lumotlar
sealed class cheklovga ega abstrakt sinfdir: uning barcha to'g'ridan-to'g'ri pastki sinflari sealed class bilan bir faylda e'lon qilinishi kerak. Bu cheklov ierarxiyani yopiq (sealed) qiladi — fayldan tashqaridagi hech qanday kod yangi pastki sinf qo'sha olmaydi.
sealed interface, Kotlin 1.5 da qo'shilgan, interfeys moslashuvchanligi bilan bir xil kafolatni taqdim etadi: sealed interface bir faylda bir nechta sinflar, ob'ektlar yoki boshqa interfeyslar tomonidan amalga oshirilishi mumkin. Sealed class dan farqli o'laroq, sealed interface yagona meros olish chekloviga ega emas — sinf bir vaqtning o'zida bir nechta sealed interfeyslarni amalga oshirishi mumkin.
Kotlin Evolution and Roadmap (2026) ma'lumotlariga ko'ra, sealed interface yanada moslashuvchan modellashtirish uchun jamiyat talabi bilan qo'shilgan. Asosiy motivatsiya — sinflarning ko'p merosisiz mustaqil tur ierarxiyalarini birlashtirish imkoniyati edi.
Sealed class e'loni class oldidan sealed kalit so'zi bilan boshlanadi. Pastki sinflar bir faylda e'lon qilinadi.
sealed class NetworkResult {
data class Success(val data: String) : NetworkResult()
data class Error(val message: String) : NetworkResult()
object Loading : NetworkResult()
}
Har bir sealed class pastki sinfi o'z xususiyatlari va metodlariga ega bo'lishi mumkin. Loading singleton (object), Success va Error esa parametrlarga ega data class. Kompilyator uchala variantni ham biladi va when da foydalanishda ularning to'liqligini tekshiradi.
sealed sinflar tur xavfsizligini yo'qotmagan holda murakkab ma'lumot modellari uchun ko'p darajali ierarxiyalar yaratib, ichma-ich joylashishi mumkin.
sealed class UiState {
object Idle : UiState()
object Loading : UiState()
data class Content(val items: List<Item>) : UiState()
data class Error(val exception: Throwable) : UiState()
}
sealed interface sealed class kabi e'lon qilinadi, lekin bir sinfda bir nechta sealed interfeyslarni amalga oshirishga imkon beradi.
sealed interface Action
sealed interface Loggable
data class Navigate(val route: String) : Action, Loggable
data class ShowToast(val text: String) : Action
object GoBack : Action, Loggable
Navigate sinfi bir vaqtning o'zida ikkita sealed interfeysni — Action va Loggable ni amalga oshiradi. Sealed class uchun bu yagona meros cheklovi tufayli mumkin emas. sealed interface mustaqil ierarxiyalarni birlashtirish moslashuvchanligini beradi.
sealed interface ierarxiya umumiy holat yoki konstruktorni talab qilmasa afzalroqdir. JetBrains Kotlin Guidelines (2026) ga ko'ra, umumiy konstruktor kerak bo'lmagan barcha yangi ierarxiyalar uchun sukut bo'yicha sealed interface ishlatilishi kerak, bu kodni kelajakdagi kengaytmalar uchun yanada moslashuvchan qiladi.
Sealed turlarning asosiy afzalligi when ifodasida to'liq (exhaustive) qayta ishlashdir. Kompilyator barcha mumkin bo'lgan pastki sinflar hisobga olinganligini tekshiradi.
fun handleResult(result: NetworkResult): String = when (result) {
is NetworkResult.Success -> "Data: ${result.data}"
is NetworkResult.Error -> "Error: ${result.message}"
is NetworkResult.Loading -> "Loading..."
// else talab qilinmaydi — kompilyator barcha variantlar qamrab olinganligini biladi
}
Agar dasturchi sealed ierarxiyasiga yangi pastki sinf qo'shsa, lekin uni when da qayta ishlashni unutsa — kompilyator xato beradi. Bu else tarmog'iga ega ochiq ierarxiyalarda mavjud bo'lmagan tur darajasidagi xavfsizlikdir.
Google Android Developers (2026) ma'lumotlariga ko'ra, sealed sinflar Jetpack Compose da UI holatini modellashtirish uchun tavsiya etilgan usuldir. When ni to'liq tekshirish dasturchi ekranni ko'rsatishning barcha mumkin bo'lgan variantlarini qayta ishlamagan holatlarning oldini oladi.
enum class va sealed class ko'pincha aralashtiriladi, lekin ularning turli maqsadlari va imkoniyatlari bor.
| Xususiyat | sealed class | enum class |
|---|---|---|
| Namunalar | Bir nechta (data class), bitta (object) | Har bir konstanta uchun aynan bitta |
| Xususiyatlar | Har bir pastki sinf uchun farqli | Barcha konstantalar uchun bir xil |
| Meros | Ha (sealed class dan) | Yo'q (implicit final) |
| Konstruktor | Parametrlarga ega bo'lishi mumkin | Faqat barcha konstantalar uchun umumiy |
| Ierarxiya | Cheklangan, sealed | Ruxsat etilgan konstantalar to'plami |
Tanlov sealed class va enum class o'rtasida vazifaga bog'liq. Agar variantlar qo'shimcha ma'lumotlarni olib yurmasa — enum dan foydalaning. Agar har bir variant noyob maydonlarni o'z ichiga olsa — sealed class yoki sealed interface dan foydalaning.
Sealed turlar Kotlin loyihalarida tur xavfsiz modellashtirishni talab qiladigan bir qator standart ssenariylar uchun ishlatiladi.
Har bir Compose ekrani barcha mumkin bo'lgan holatlarni tavsiflovchi sealed class UiState ga ega bo'lishi mumkin: Idle, Loading, Content(data), Error(exception). when ifodasi barcha holatlar qayta ishlanganligini kafolatlaydi.
NetworkResult Success, Error, Loading variantlari bilan Retrofit va Ktor bilan Kotlin loyihalarida standart naqshdir. sealed class so'rovning har bir natijasini xavfsiz qayta ishlashni ta'minlaydi.
sealed interface navigatsiya marshrutlari uchun modullarga yagona ierarxiya doirasida o'z marshrutlarini e'lon qilish imkonini beradi. Bu kompilyatsiya bosqichida noma'lum marshrutlar bilan bog'liq xatolarni bartaraf qiladi.
KotlinConf (2025) ma'lumotlariga ko'ra, sealed class va sealed interface zamonaviy Kotlin ilovalarida type-safe dizaynning asosidir. Ular kompilyatsiya bosqichida xavfsizlikni yo'qotmagan holda murakkab domen tuzilmalarini modellashtirish uchun data class bilan birlashtiriladi.
Tez-tez beriladigan savollar
Barcha to'g'ridan-to'g'ri sealed class pastki sinflari bir faylda e'lon qilinishi kerak. Sealed interface uchun ham xuddi shunday qoida — amalga oshirishlar bir faylda.
Yo'q, bitta fayl qoidasi sealed interface uchun ham amal qiladi. Barcha amalga oshirishlar sealed interface e'lon qilingan faylda bo'lishi kerak.
sealed interface holat va konstruktorga ega emas, bir nechta amalga oshirishga imkon beradi. sealed class konstruktor va umumiy holatga ega bo'lishi mumkin, lekin sinf faqat bitta sealed class dan meros olishi mumkin.
Kompilyator when to'liqligini tekshiradi: agar barcha pastki sinflar qayta ishlanmagan bo'lsa, kod kompilyatsiya qilinmaydi. Bu runtime xatolarini bartaraf qiladi va kodni xavfsizroq qiladi.
Ha, sealed class konstruktorga ega bo'lishi mumkin (sukut bo'yicha private). Barcha pastki sinflar super() orqali ushbu konstruktorga parametrlarni uzatishi mumkin.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.