CodeBlanks Logo Icon CodeBlanks

Özet - Sealed class

sealed class, when ve data class'ı birleştirerek bir sonuç modeli yazarsın.

Özet - Sealed class

Bu grupta sealed class tanımını, when ile exhaustive dallanmayı, data class alt tiplerini, state yönetimini ve Result kalıbını öğrendin.

Şimdi bunları birleştireceksin: bir sealed class, data class alt tipleri ve bir when fonksiyonu ile bir sonuç modeli yazacaksın. Bu yapı, Kotlin'de güvenli tip hiyerarşilerinin temelidir. İleride object bildirimi ve extension fonksiyonları bu temelin üzerine eklenecek.

Uygulama ApiResult modelini birleştir

ApiResult adında bir sealed class tanımla. İki data class alt tip ekle: Success(val data: String) ve Failure(val error: String); her ikisi de ApiResult()'a miras versin. process(r: ApiResult): String fonksiyonu yaz; gövdesi when (r) ile Success için "veri: ${r.data}", Failure için "sorun: ${r.error}" döndürsün. main içinde Success("kayıt") örneği oluştur ve process sonucunu yazdır.

Başlangıç kodu

Main.kt
// ApiResult sealed class tanımı
// data class Success ve Failure alt tipleri
// process fonksiyonu: when ile dallanma
// main'de Success örnekle, process yazdır

Örnek çözüm

Main.kt
sealed class ApiResult
data class Success(val data: String) : ApiResult()
data class Failure(val error: String) : ApiResult()

fun process(r: ApiResult): String {
    return when (r) {
        is Success -> "veri: ${r.data}"
        is Failure -> "sorun: ${r.error}"
    }
}

fun main() {
    val r: ApiResult = Success("kayıt")
    println(process(r))
}

Beklenen çıktı

veri: kayıt

Sırada ne var?

Sealed class'ları öğrendin. Sonraki gruplarda object ile singleton yapıları, extension function ile mevcut türlere metot eklemeyi ve companion object ile sınıf düzeyi üyeleri keşfedeceksin.

Bu grup; sealed class, when, data class alt tipleri, state yönetimi ve Result kalıbını birleştirdi. Bunlar Kotlin'de güvenli tip hiyerarşilerinin çekirdeğidir. Bir sonraki adımda singleton ve extension ile kod organizasyonunu göreceksin.

Uygulama Event sealed class'ı ve handle fonksiyonu

Event adında bir sealed class tanımla. Üç alt tip ekle: data class Click(val x: Int, val y: Int) : Event(), data class Key(val key: String) : Event() ve object Hover : Event(). handle(e: Event): String fonksiyonu yaz; gövdesi when (e) ile Click için "tıklama: ${e.x}, ${e.y}", Key için "tuş: ${e.key}", Hover için "üzerine gelindi" döndürsün. main içinde Click(10, 20) örneği oluştur ve handle sonucunu yazdır.

Başlangıç kodu

Main.kt
// Event sealed class tanımı
// data class Click, data class Key, object Hover alt tipleri
// handle fonksiyonu: when ile dallanma
// main'de Click örnekle, handle yazdır

Örnek çözüm

Main.kt
sealed class Event
data class Click(val x: Int, val y: Int) : Event()
data class Key(val key: String) : Event()
object Hover : Event()

fun handle(e: Event): String {
    return when (e) {
        is Click -> "tıklama: ${e.x}, ${e.y}"
        is Key -> "tuş: ${e.key}"
        Hover -> "üzerine gelindi"
    }
}

fun main() {
    val e: Event = Click(10, 20)
    println(handle(e))
}

Beklenen çıktı

tıklama: 10, 20

Soru ve cevaplar

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

1 Bir sealed class'a yeni bir alt tip eklersen ne olur?

  • Mevcut when ifadeleri otomatik yeni dalı ekler
  • Yeni alt tip silinir
  • Sealed class artık sealed değildir
  • Tüm when ifadeleri derleme hatası verir ve yeni dalı eklemeyi zorlar Doğru cevap

Açıklama: Tüm when ifadeleri derleme hatası verir ve yeni dalı eklemeyi zorlar.

2 when dalını tamamla

Soru
fun process(r: ApiResult): String {
    return when (r) {
        ____ -> "veri: ${r.data}"
        is Failure -> "sorun: ${r.error}"
    }
}
Cevap
fun process(r: ApiResult): String {
    return when (r) {
        is Success -> "veri: ${r.data}"
        is Failure -> "sorun: ${r.error}"
    }
}

Açıklama: is ile tür kontrolü yapılır ve smart cast sağlanır.

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