0Pricing
Kotlin Academy · Ders

Sealed Sınıflarla Kullanıcı Arayüzü Durumlarını Modelleme

Loading, Success ve Error kullanıcı arayüzü durumlarını temsil etmek için sealed sınıfları uygulayın.

Sealed Sınıflarla Kullanıcı Arayüzü Durumlarını Modelleme, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Kotlin Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Kotlin Academy kursu toplamda 4 dersten oluşur.

Kullanıcı Arayüzü Durumu Sorunu

Kullanıcı arayüzü ekranlarının birden çok durumu vardır: yükleniyor, veri gösteriliyor, hata gösteriliyor veya boş. Bunları boole değişkenleriyle (isLoading, hasError) yönetmek kırılgandır. Mühürlü sınıflar bu sorunu çözer.

Klasik Boole Cehennemi

Ayrı boole değişkenleri kullanmak imkânsız durumlara yol açar.
// Fragile: isLoading=true AND hasError=true is invalid
var isLoading = false
var hasError = false
var data: List<Item>? = null
// 8 combinations, most of which are invalid!

Mühürlü Durum: Yalnızca Geçerli Durumlar

Mühürlü sınıf, geçersiz durumların ifade edilememesini sağlar.
sealed class UiState<out T>
object Loading : UiState<Nothing>()
data class Success<T>(val data: T) : UiState<T>()
data class Error(val message: String, val retryable: Boolean = true) : UiState<Nothing>()
object Empty : UiState<Nothing>()

Duruma Göre Görüntüleme

Her durum için doğru kullanıcı arayüzünü görüntülemek üzere when kullanın.
fun render(state: UiState<List<Item>>) = when (state) {
    Loading -> showProgressBar()
    is Success -> showItems(state.data)
    is Error -> showError(state.message, state.retryable)
    Empty -> showEmptyView()
}

ViewModel'ın Durumları Yayması

Bir ViewModel, mühürlü durumları StateFlow aracılığıyla yayar.
class ItemViewModel : ViewModel() {
    private val _state = MutableStateFlow<UiState<List<Item>>>(Loading)
    val state: StateFlow<UiState<List<Item>>> = _state

    fun loadItems() = viewModelScope.launch {
        _state.value = Loading
        _state.value = try {
            Success(repository.getItems())
        } catch (e: Exception) {
            Error(e.message ?: "Unknown error")
        }
    }
}

İçerikle Birlikte Durumları Birleştirme

Herhangi bir veri türünü işlemek için genel mühürlü durumları kullanın.
fun <T> loading(): UiState<T> = Loading
fun <T> success(data: T): UiState<T> = Success(data)
fun <T> error(msg: String): UiState<T> = Error(msg)

Sayfalandırma Durumu Örneği

Mühürlü sınıflar, sayfalandırılmış liste durumlarını doğal biçimde modeller.
sealed class PageState
object Idle : PageState()
object FirstLoad : PageState()
data class Content(val items: List<Item>, val hasMore: Boolean) : PageState()
data class LoadingMore(val items: List<Item>) : PageState()
data class Error(val items: List<Item>?, val msg: String) : PageState()

Durumu Dönüştürme

Diğer durumlara dokunmadan başarılı durumları eşleyin.
fun <T, R> UiState<T>.mapData(transform: (T) -> R): UiState<R> = when (this) {
    is Success -> Success(transform(data))
    is Error -> this
    Loading -> Loading
    Empty -> Empty
}

Mühürlü Durumlarla Test Etme

Durumları test etmek kolaydır — yalnızca hangi varyantın yayıldığını denetleyin.
@Test
fun testLoadingState() {
    viewModel.loadItems()
    assertEquals(Loading, viewModel.state.value)
}
@Test
fun testSuccessState() {
    viewModel.setData(listOf(item))
    assert(viewModel.state.value is Success)
}

Birleşik Durum ile Birden Çok Akışın Karşılaştırılması

Tek bir mühürlü durum akışı, eşzamanlı tutulması gereken birden çok ayrı akıştan daha temizdir.
// Fragile: two flows must stay in sync
val loading = MutableStateFlow(false)
val error = MutableStateFlow<String?>(null)

// Clean: one sealed state
val state = MutableStateFlow<UiState<List<Item>>>(Loading)

Durumlara Üst Veri Ekleme

Mühürlü alt türler ilgili üst verileri taşıyabilir.
data class Error(
    val message: String,
    val code: Int = 0,
    val retryable: Boolean = true,
    val timestamp: Long = System.currentTimeMillis()
) : UiState<Nothing>()

Kısa Kontrol

Kullanıcı arayüzü durumunu mühürlü sınıflarla modellemek hangi temel sorunu çözer?

Özet

Kullanıcı arayüzü durumunu mühürlü sınıflarla modelleyin: Loading, Success(data), Error(message), Empty. Her durumu görüntülemek için when kullanın. Mühürlü tür içeren tek bir StateFlow, birden çok boole bayrağından daha etkilidir. Sırada: mühürlü hiyerarşileri iç içe yerleştirme!

Sıkça Sorulan Sorular

“Sealed Sınıflarla Kullanıcı Arayüzü Durumlarını Modelleme” dersi ücretsiz mi?

Evet — “Sealed Sınıflarla Kullanıcı Arayüzü Durumlarını Modelleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Kotlin Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Kotlin Academy kursu toplamda 4 dersten oluşur.

“Sealed Sınıflarla Kullanıcı Arayüzü Durumlarını Modelleme” dersinde ne öğreneceğim?

Loading, Success ve Error kullanıcı arayüzü durumlarını temsil etmek için sealed sınıfları uygulayın. Kotlin Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Kotlin Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Kotlin Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Sealed Sınıflarla Kullanıcı Arayüzü Durumlarını Modelleme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Kotlin Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Kotlin Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. sealed class ve sealed interface: Hangisi Ne Zaman Kullanılır
  2. Sealed Hiyerarşilerle Eksiksiz when
  3. Sealed Sınıflarla Kullanıcı Arayüzü Durumlarını Modelleme
  4. Sealed Hiyerarşileri İç İçe Yerleştirme ve Birleştirme
← Kotlin Academy Sayfasına Dön