Middle
Kotlin'da sealed sinflar va abstrakt sinflar o'rtasidagi farq nima?
sobes.tech AI
AIdan javob
Sealed sinflar va abstrakt sinflar o'rtasidagi asosiy farq shundaki, sealed sinflar merosxo'rlik ierarxiyasini bitta fayl yoki modul bilan cheklaydi (Kotlin 1.5+ uchun). Sealed sinfning vorislari, sealed sinf bilan bir xil faylda e'lon qilinishi kerak, bu when ifodalarida to'liq tekshirishni ta'minlaydi.
Farqlar:
- Merosxo'rlik:
- Abstrakt sinflar har qanday joyda meros qilib olinishi mumkin.
- Sealed sinflar faqat bir xil faylda (Kotlin 1.5 oldin) yoki bir xil modulda (Kotlin 1.5+) meros qilib olinishi mumkin.
whenbilan foydalanish:- Sealed tur bilan
whenishlatilganda, kompilyator barcha mumkin bo'lgan pastki turlarni hisobga olganligini tekshirishi mumkin, buwhenni to'liq qiladi va agar barcha pastki turlar ishlov berilgan bo'lsa,elsebo'lagi aniq ko'rsatilishini talab qilmaydi. - Abstrakt sinflar bilan, kompilyator to'liqlikni kafolatlamaydi, shuning uchun ko'pincha
elsekerak bo'ladi.
- Sealed tur bilan
- Namuna yaratish:
- Na sealed, na abstrakt sinflar to'g'ridan-to'g'ri instansiya qilinishi mumkin emas.
- A'zolar:
- Ikkala sinf ham abstrakt va abstrakt bo'lmagan a'zolarga ega bo'lishi mumkin.
Sealed sinf misoli:
sealed class Result<out T> {
data class Success<out T>(val data: T) : Result<T>()
data class Error(val message: String) : Result<Nothing>()
}
fun processResult(result: Result<Int>) {
when (result) {
is Result.Success -> {
// Muvaffaqiyatli natijani ishlash
println("Muvaffaqiyat: ${result.data}")
}
is Result.Error -> {
// Xatoni ishlash
println("Xato: ${result.message}")
}
// Agar barcha vorislar ishlov berilgan bo'lsa, else kerak emas
}
}
Abstrakt sinf misoli:
abstract class Shape {
abstract fun area(): Double
}
class Circle(val radius: Double) : Shape() {
override fun area(): Double = Math.PI * radius * radius
}
class Rectangle(val width: Double, val height: Double) : Shape() {
override fun area(): Double = width * height
}
fun calculateArea(shape: Shape): Double {
return shape.area()
}
Qachon foydalanish kerak:
- Sealed sinflar: Cheklangan holatlar yoki turlar to'plamini ifodalash uchun ideal,
whenifodalarida to'liq tekshirish talab qilinadigan hollarda. Ko'pincha operatsiya natijalarini (muvaffaqiyat/xato), UI holatlarini, voqealarni modellashtirish uchun ishlatiladi. - Abstrakt sinflar: Umumiy funksionallik va shartlarni belgilash uchun mos, ular har qanday joyda meros qilib olinishi mumkin.
Xulosa qilib aytganda, sealed sinflar merosxo'rlik ierarxiyasini yanada qat'iy nazorat qilish imkonini beradi va cheklangan turdagi pastki turlar bilan ishlashda xavfsizlik va o'qilishi yaxshilanadi.