Sobes.tech
Middle

Seal sinflari bilan tanishdingizmi va ularning xususiyati nima?

sobes.tech AI

AIdan javob

Ha, tanishaman.

sealed sinflarining xususiyati shundaki, ular vorislik hierarxiyasini cheklash imkonini beradi. sealed sinfning barcha to'g'ridan-to'g'ri vorislari bir xil faylda e'lon qilinishi kerak. Bu kompilatorga barcha mumkin bo'lgan vorislarni bilishni ta'minlaydi, bu esa when ifodalarida to'ldirishni tekshirish uchun foydalidir.

Misol:

sealed class Result {
    data class Success(val message: String) : Result()
    data class Error(val code: Int, val description: String) : Result()
    object Loading : Result() // Yuklash holati uchun singleton
}

fun processResult(result: Result) {
    when (result) {
        is Result.Success -> println("Muvaffaqiyat: ${result.message}")
        is Result.Error -> println("Xato ${result.code}: ${result.description}")
        Result.Loading -> println("Yuklanmoqda...")
        // Else kerak emas, chunki kompilator barcha variantlarni biladi
    }
}

Afzalliklar:

  • Xavfsizlik: when ifodalarining to'liqligini kafolatlaydi, else kerak emas.
  • O'qilishi: Cheklangan holatlar yoki vorislarning aniq ko'rsatilishini ta'minlaydi.
  • Nazorat: tashqaridan nazorat qilinmaydigan vorislikni oldini oladi.

enum class bilan farqi: sealed sinflar har bir voris uchun turli ma'lumot turlariga ega bo'lishi mumkin (masalan, Success va Error), enum class elementlari statik bo'lib, faqat belgilangan xususiyatlarga ega bo'lishi mumkin, ular hammaga umumiy. sealed sinflar shuningdek, obyekt-nesnalarni (Loading) ham bo'lishi mumkin.