Sealed ve state
- Kotlin kursu
- Orta seviye
- Ders 27/116
- 5 dk
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
// 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
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
sealed ____ UiState
object Loading : UiState()
data class Success(val data: String) : UiState()
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.