Kotlin Sealed Class vs Enum: Ne Zaman Hangi Yapıyı Tercih Etmelisin
# Kotlin Sealed Class vs Enum: Ne Zaman Hangi Yapıyı Tercih Etmelisin
Enum sabit değerlerden oluşur. Örneğin haftanın günleri, renk seçenekleri gibi sınırlı sayıda veri tutmak için idealdir.
Sealed class ise daha esnek bir yapıdır. Farklı veri türlerini bir üst kategori altında toplamak için kullanılır. Enum'dan farkı, her case'in kendi özelliklerine sahip olabilmesidir.
Enum, sabit bir liste için uygundur. Tüm değerler önceden bellidir ve değişmez.
1enum class Durum {2BASARILI, HATA, BEKLENIYOR3}45fun cevapVer(durum: Durum) {6when(durum) {7Durum.BASARILI -> println("İşlem tamamlandı")8Durum.HATA -> println("Bir sorun oluştu")9Durum.BEKLENIYOR -> println("Lütfen bekleyin")10}11}1213cevapVer(Durum.BASARILI)Çıktı:
1İşlem tamamlandıSealed class, her case'in farklı veri taşıması gerektiğinde kullanılır. Örneğin API sonucu: başarı durumunda veri, hata durumunda mesaj.
1sealed class ApiSonucu {2data class Basarili(val veri: String): ApiSonucu()3data class Hata(val kod: Int, val mesaj: String): ApiSonucu()4object Yukleniyor: ApiSonucu()5}67fun sonuclariIsle(sonuc: ApiSonucu) {8when(sonuc) {9is ApiSonucu.Basarili -> println("Veri: ${sonuc.veri}")10is ApiSonucu.Hata -> println("Hata ${sonuc.kod}: ${sonuc.mesaj}")11is ApiSonucu.Yukleniyor -> println("Yükleniyor...")12}13}1415sonuclariIsle(ApiSonucu.Basarili("Kullanıcı verileri"))16sonuclariIsle(ApiSonucu.Hata(404, "Bulunamadı"))Çıktı:
1Veri: Kullanıcı verileri2Hata 404: Bulunamadı| Durum | Enum | Sealed Class |
|-------|------|---------------|
| Sabit değerler | | |
| Her case farklı veri | | |
| Basit durumlar | | |
| Karmaşık veri yapıları | | |
Enum kullan: Haftanın günleri, boolean değerleri, kategoriler gibi sabit listeler için.
Sealed class kullan: API yanıtları, hesap makinesi sonuçları, kullanıcı girişi durumları gibi her case'in kendi veri yapısı olduğunda.
İkisi de type-safe kod yazmanı sağlar. Doğru seçim, kodun okunabilirliğini ve bakımını kolaylaştırır.
0 yorum