Kotlin'da data sinflari va sealed sinflar haqida gapirib bering.
sobes.tech AI
AIdan javob
Kotlin'dagi ma'lumotlar sinflari ma'lumotlarni saqlash uchun ishlatiladi. Ular avtomatik ravishda equals(), hashCode(), toString(), copy() kabi foydali metodlarni va destrukturizatsiya uchun komponentlarni yaratadi.
// Ma'lumotlar sinfi misoli
data class User(val name: String, val age: Int)
Seal sinflar cheklangan sinf merosxo'rligini ifodalash uchun ishlatiladi. Barcha vorislari bir xil faylda bo'lishi kerak (Kotlin 1.5+ da bu cheklov yumshatilgan). Bu kompilatorga when ifodasida vorislarni to'liq tekshirish imkonini beradi.
// Seal sinfi misoli
sealed class Result {
data class Success(val data: String) : Result()
data class Error(val message: String) : Result()
object Loading : Result()
}
// Seal sinfini `when` ifodasida ishlatish misoli
fun processResult(result: Result) {
when (result) {
is Result.Success -> println("Muvaffaqiyat: ${result.data}")
is Result.Error -> println("Xato: ${result.message}")
Result.Loading -> println("Yuklanmoqda...")
}
}
Asosiy farqlar:
- Maqsad: data sinflar - ma'lumotlarni saqlash, seal sinflar - sinf merosxo'rligini cheklash.
- Yaratiladigan metodlar: data sinflar standart metodlarni yaratadi, seal sinflar - yaratmaydi.
- Vorislarni cheklash: seal sinflar vorislarni e'lon qilishda cheklovlar qo'yadi, data sinflar - qo'ymaydi.
whenda to'liq tekshirish: Kotlin kompilatori seal sinf vorislarining to'liq tekshirishiniwhenda amalga oshirishi mumkin,elsebo'lakka ehtiyoj qolmaydi.
Har ikkala seal va data sinflar abstrakt bo'lishi mumkin, ammo data sinflar open bo'lishi mumkin emas (ular default sifatida final) va open metodlarni to'g'ridan-to'g'ri amalga oshira olmaydi (faqat interfeyslar yoki abstrakt sinflar orqali). Seal sinflar, odatda, abstrakt bo'lib, ularning konstruktorlari private.