Kotlin
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.
Örnek çözümü göster
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))
}
Kendini test et
-
Sealed state tanımını tamamla
sealed ____ UiState
object Loading : UiState()
data class Success(val data: String) : UiState()
Cevabı göster
sealed class UiState
object Loading : UiState()
data class Success(val data: String) : UiState()
-
State kalıbını eşle
- object Loading
- Tek örnek durum
- data class Success
- Verili durum
- data class Error
- Hatalı durum
- when (state)
- Duruma göre dal
-
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
Cevabı göster
Çünkü derleyici tüm durumları denetler ve dal unutulmaz — Sealed class ile when exhaustive olur; durum dalı unutulmaz.
Sıradaki ders: Sealed ve result