Sobes.tech
Middle

Seal sinifləri ilə tanışsınızmı və onların xüsusiyyəti nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Bəli, tanıyıram.

sealed sinfların xüsusiyyəti odur ki, onlar irsiyyət hiyerarşisini məhdudlaşdıra bilirlər. sealed sinfinin bütün birbaşa alt tipləri eyni faylda elan edilməlidir. Bu, tərtibçinin bütün mümkün alt tipləri bilməsini təmin edir və when ifadələrində tamlığı yoxlama üçün faydalıdır.

Nümunə:

sealed class Result {
    data class Success(val message: String) : Result()
    data class Error(val code: Int, val description: String) : Result()
    object Loading : Result() // Yükləmə vəziyyəti üçün singleton
}

fun processResult(result: Result) {
    when (result) {
        is Result.Success -> println("Uğur: ${result.message}")
        is Result.Error -> println("Xəta ${result.code}: ${result.description}")
        Result.Loading -> println("Yüklənir...")
        // Else lazım deyil, çünki tərtibçi bütün variantları bilir
    }
}

Üstünlüklər:

  • Təhlükəsizlik: when ifadələrinin tam olmasını təmin edir, else lazım deyil.
  • Oxunaqlıq: Mümkün olan vəziyyətlərin və ya alt tiplərin məhdud dəstini aydın şəkildə göstərir.
  • Nəzarət: Xaricdən nəzarətsiz irsiyyəti qarşısını alır.

enum class ilə fərqi: sealed sinflər hər bir alt tiplər üçün müxtəlif məlumat tiplərinə sahib ola bilər (məsələn, nümunədə SuccessError), halbuki enum class elementləri statikdir və yalnız müəyyən xüsusiyyətlərə sahib ola bilər, hamısı üçün ümumi. sealed sinflər həmçinin obyekt nümunələri (Loading) də ola bilər.