Sobes.tech
Middle

Kotlin-də data sinifləri və sealed siniflər haqqında danış.

sobes.tech Süni İntellekt

AI-dan cavab

Kotlin-də Data sinfləri məlumatların saxlanması üçün istifadə olunur. Onlar avtomatik olaraq equals(), hashCode(), toString(), copy() kimi faydalı metodlar və destrukturasiya üçün komponentlər yaradır.

// Data sinfi nümunəsi
data class User(val name: String, val age: Int)

Sealed sinflər məhdudlaşdırılmış sinf irsiliyini nümayiş etdirmək üçün istifadə olunur. Bütün alt sinflər eyni faylda, sealed sinfi ilə birlikdə təyin edilməlidir (Kotlin 1.5+ versiyasında bu məhdudiyyət yumşaldılmışdır). Bu, kompilatorun when ifadəsində alt sinflərin tam yoxlamasını təmin etməyə imkan verir.

// Sealed sinfi nümunəsi
sealed class Result {
    data class Success(val data: String) : Result()
    data class Error(val message: String) : Result()
    object Loading : Result()
}

// Sealed sinfi `when` ifadəsində istifadə nümunəsi
fun processResult(result: Result) {
    when (result) {
        is Result.Success -> println("Uğur: ${result.data}")
        is Result.Error -> println("Xəta: ${result.message}")
        Result.Loading -> println("Yüklənir...")
    }
}

Əsas fərqlər:

  • Məqsəd: data sinfləri - məlumatların saxlanması, sealed sinflər - sinf irsiliyinin məhdudlaşdırılması.
  • Yaradılan metodlar: data sinfləri standart metodlar yaradır, sealed sinflər - yox.
  • Alt sinf məhdudiyyəti: sealed sinflər alt sinflərin elanına məhdudiyyət qoyur, data sinfləri - yox.
  • when-də tam yoxlama: Kotlin kompilatoru, sealed sinfin alt sinflərinin when-də tam yoxlamasını, else bloku olmadan, edə bilər.

Həm sealed, həm də data sinfləri abstrakt ola bilər, lakin data sinfləri open ola bilməz (onlar standart olaraq final) və birbaşa open metodları tətbiq edə bilməz (yalnız interfeys və ya abstrakt sinflər vasitəsilə). Sealed sinflər, standart olaraq, abstraktdır və onların konstruktorları özəl (private) olur.