Middle
Kotlin'da data sinflari va sealed sinflar nima uchun ishlatiladi?
sobes.tech AI
AIdan javob
Ma'lumot to'plam sinflari faqat ma'lumotlarni saqlash uchun mo'ljallangan sinflarni yaratishni soddalashtiradi. Kompilyator ular uchun avtomatik ravishda quyidagilarni ishlab chiqaradi:
equals()hashCode()toString()copy()componentN()destrukturatsiya uchun
Ma'lumot sinfi User(val nom: String, val yosh: Int)
// Foydalanish
val user = User("Alice", 30)
println(user) // User(nom=Alice, yosh=30) ni chiqaradi
val user2 = user.copy(yosh = 31)
val (nom, yosh) = user // Destrukturatsiya
Yopiq sinflar (sealed) sinflarning cheklangan merosxo'rlik hierarxiyasini ifodalaydi, bu erda barcha mumkin bo'lgan kichik sinflar kompilatsiya vaqtida ma'lum. Bu ularni when ifodalarida else bo'limisiz ishlatishga imkon beradi, bu esa barcha variantlarning to'liq tekshirilishini ta'minlaydi.
Yopiq sinf Result {
data class Success(val data: String) : Result()
data class Error(val message: String) : Result()
object Loading : Result() // Ob'ekt, parametrlar yo'q
}
fun handleResult(result: Result) {
when (result) {
is Result.Success -> println("Muvaffaqiyat: ${result.data}")
is Result.Error -> println("Xato: ${result.message}")
Result.Loading -> println("Yuklanmoqda...")
}
}
Taqqoslash:
| Xususiyat | Ma'lumot sinfi | Yopiq sinf |
|---|---|---|
| Maqsad | Ma'lumotlarni saqlash | Cheklangan sinf merosxo'rligi |
| Imkoniyatlar | Avtomatik metodlar ishlab chiqarish | when da to'liq tekshirish |
| Kichik sinflar | Maxsus cheklovlar yo'q | Bir xil fayl yoki modulda bo'lishi kerak |
| Foydalanish | Ma'lumot modellari, DTOlar | Holatlarni, voqealarni, variantlarni ifodalash |