Middle
Сиз sealed класстар менен таанышсызбы жана алардын өзгөчөлүгү эмнеде?
sobes.tech AI
AIден жооп
Bale, tanışam.
sealed sinflarının özelliği, miraslıq hiyerarşisini məhdudlaşdırmağa imkan verməsidir. 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ıq yoxlaması üçü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:
whenifadələrinin tam olmasını təmin edir,elselazı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 sinflar hər bir alt tiplər üçün müxtəlif məlumat tiplərinə sahib ola bilər (məsələn, Success və Error nümunədə), 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.