Sparround

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/componentN avtomatik 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, when ifadə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.
Sualsealed classenum 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 saydaHə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ə).

  • when ilə emal funksiyası yaz, else yazmadan — kompilyator razı qalmalıdır.
  • Sonra yeni variant (Pending) əlavə et və kompilyatorun harada xəbərdarlıq verdiyini gör.
  • Eyni modeli enum class ilə 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