CodeBlanks Logo Icon CodeBlanks

Sealed ve state

Sealed class ile state yönetimini öğrenirsin.

State yönetimi

Sealed class'lar state (durum) yönetimi için idealdir. Bir ekran veya işlem; yükleniyor, başarı veya hata gibi karşılıklı dışlanan durumlar içerebilir. Her durum kendi verisini taşır.

Örnek: sealed class UiState; object Loading : UiState(); data class Success(val data: String) : UiState(); data class Error(val message: String) : UiState(). Bir UiState örneği aynı anda yalnızca bir durumda olur. when ile duruma göre UI güncellenir; tüm durumlar denetlendiği için hiçbir dal unutulmaz. Bu, karmaşık state mantığını sadeleştirir.

Loading, Success, Error

Bir UI state genellikle üç durumdan birindedir: Loading (yükleniyor), Success (başarı, veri taşır) ve Error (hata, mesaj taşır).

Örnek: object Loading : UiState(); data class Success(val data: String) : UiState(); data class Error(val message: String) : UiState(). Loading tek bir durumdur (object); Success ve Error veri taşıdığı için data class'tır. when ile her durum için ayrı UI üretilir: yükleniyor simgesi, veri listesi, hata mesajı. Bu kalıp Android ve UI uygulamalarında yaygındır.

Uygulama UiState sealed class'ı ile render

UiState adında bir sealed class tanımla. Üç alt tip ekle: object Loading : UiState(), data class Success(val data: String) : UiState() ve data class Error(val message: String) : UiState(). render(state: UiState): String fonksiyonu yaz; gövdesi when (state) ile Loading için "yükleniyor", Success için state.data, Error için state.message döndürsün. main içinde Success("kayıtlar") örneği oluştur ve render sonucunu yazdır.

Başlangıç kodu

Main.kt
// UiState sealed class tanımı
// object Loading, data class Success ve Error alt tipleri
// render fonksiyonu: when ile dallanma
// main'de Success örnekle, render yazdır

Örnek çözüm

Main.kt
sealed class UiState
object Loading : UiState()
data class Success(val data: String) : UiState()
data class Error(val message: String) : UiState()

fun render(state: UiState): String {
    return when (state) {
        is Loading -> "yükleniyor"
        is Success -> state.data
        is Error -> state.message
    }
}

fun main() {
    val s: UiState = Success("kayıtlar")
    println(render(s))
}

Beklenen çıktı

kayıtlar

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Sealed state tanımını tamamla

Soru
sealed ____ UiState
object Loading : UiState()
data class Success(val data: String) : UiState()
Cevap
sealed class UiState
object Loading : UiState()
data class Success(val data: String) : UiState()

Açıklama: sealed class ile UiState kapalı hiyerarşisi tanımlanır.

2 State kalıbını eşle

Kavram Anlamı
object Loading Tek örnek durum
data class Success Verili durum
data class Error Hatalı durum
when (state) Duruma göre dal

3 Bir sealed class ile state yönetimi neden kullanılır?

  • Çünkü sealed class çalışma zamanında hızlıdır
  • Çünkü tüm durumlar tek değişkende toplanır
  • Çünkü sealed class veritabanıdır
  • Çünkü derleyici tüm durumları denetler ve dal unutulmaz Doğru cevap

Açıklama: Sealed class ile when exhaustive olur; durum dalı unutulmaz.

Orta seviye bölümündeki tüm dersler