data, sealed, object, enum — nə vaxt hansı
Kotlin-in xüsusi class növləri müsahibələrin sevimli mövzusudur, çünki hər birinin arxasında dizayn niyyəti dayanır:
- data class — dəyər daşıyıcısı:
equals/hashCode/toString/copy/componentNavtomatik generasiya olunur (yalnız primary constructor-dakı property-lər üzərində). - sealed class / sealed interface — məhdud iyerarxiya: bütün alt tiplər compile vaxtı məlumdur,
whenifadəsi exhaustive olur. - object — dilin öz singleton-u: thread-safe, lazy initialize olunur.
- companion object — class-a bağlı statik-bənzər üzvlər, factory metodlar üçün tipik yer.
- enum class — sabit dəyərlər çoxluğu; hər sabit state saxlaya və metod override edə bilər.
| Sual | sealed class | enum class |
|---|---|---|
| Hər variant öz data-sını saxlaya bilər? | Bəli — hər alt class fərqli property-lərlə | Məhdud — bütün sabitlər eyni sahələri paylaşır |
| Instance sayı | Hər alt tipdən istənilən sayda | Hər sabitdən düz bir dənə |
| Tipik istifadə | UI state, API nəticəsi (Success/Error/Loading) | Sabit siyahılar: valyuta, status kodu |
Klassik müsahibə sualı: "API cavabını necə modelləşdirərsən?" Gözlənilən cavab sealed class-dır: Success(data), Error(code, message), Loading. when exhaustive olduğu üçün yeni hal əlavə edəndə kompilyator bütün istifadə yerlərini xatırladır — bank tətbiqində unudulmuş error-handling budaqlarının qarşısını alır.
🛠 Tapşırıq
Ödəniş nəticəsini modelləşdir: sealed interface PaymentResult və altında Success, Declined, NetworkError variantları (hərəsi fərqli data ilə).
whenilə emal funksiyası yaz,elseyazmadan — kompilyator razı qalmalıdır.- Sonra yeni variant (
Pending) əlavə et və kompilyatorun harada xəbərdarlıq verdiyini gör. - Eyni modeli
enum classilə qurmağa çalış — nəyin mümkün olmadığını yaz.
Bitdi sayılır: "niyə sealed, niyə enum yox" sualına öz nümunənlə cavab verə bilirsənsə.
📚 Mənbələr və sənədlər
- Data classes — Kotlin sənədlərirəsmikotlinlang.org
- Sealed classes və interfacesrəsmikotlinlang.org
- Object declarations və expressionsrəsmikotlinlang.org