CodeBlanks Logo Icon CodeBlanks

Sealed ve data

Sealed class içinde data class kullanmayı öğrenirsin.

data class alt tip

Bir sealed class'ın alt tipi data class olabilir. Bu, alan içeren durumları ifade etmek için uygundur; her alt tip kendi verisini taşır.

Örnek: sealed class Message; data class Text(val content: String) : Message(); data class Image(val url: String) : Message(). Text bir içerik dizgesi, Image bir URL taşır. Bir Message örneği Text("merhaba") veya Image("a.png") olabilir. when ile türü belirlendiğinde, Kotlin smart cast yapar ve alt tipin alanlarına doğrudan erişirsin.

Smart cast ile alanlara erişim

Bir sealed class üzerinde when ile tür kontrolü yaptığında, Kotlin otomatik olarak smart cast uygular. Alt tipin alanlarına doğrudan erişebilirsin; açıkça dönüşüm yapmana gerek yoktur.

Örnek: when (m) { is Text -> m.content; is Image -> m.url }. is Text dalında m otomatik olarak Text'e dönüştürülür; m.content doğrudan erişilir. Aynı şekilde is Image dalında m.url geçerlidir. Bu, sealed class ile when kullanımını kısa ve güvenli kılar.

Uygulama Message sealed class'ı ve data class alt tipleri

Message adında bir sealed class tanımla. İki data class alt tip ekle: Text(val content: String) ve Image(val url: String); her ikisi de Message()'a miras versin. describe(m: Message): String fonksiyonu yaz; gövdesi when (m) ile Text için m.content, Image için m.url döndürsün. main içinde Text("merhaba") örneği oluştur ve describe sonucunu yazdır.

Başlangıç kodu

Main.kt
// Message sealed class tanımı
// data class Text ve Image alt tipleri
// describe fonksiyonu: when ile dallanma
// main'de Text örnekle, describe yazdır

Örnek çözüm

Main.kt
sealed class Message
data class Text(val content: String) : Message()
data class Image(val url: String) : Message()

fun describe(m: Message): String {
    return when (m) {
        is Text -> m.content
        is Image -> m.url
    }
}

fun main() {
    val m: Message = Text("merhaba")
    println(describe(m))
}

Beklenen çıktı

merhaba

Soru ve cevaplar

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

1 Aşağıdaki tanımlardan hangisi bir sealed class'ın data class alt tipi olabilir?

  • class Plain : Message()
  • object Loading : Message()
  • data class Text(val content: String) : Message() Doğru cevap
  • interface Drawable : Message()

Açıklama: data class, alan içeren bir alt tip olarak sealed class'a miras verir.

2 data class alt tip tanımını tamamla

Soru
data class Text(val content: String) : ____()

data class Image(val url: String) : Message()
Cevap
data class Text(val content: String) : Message()

data class Image(val url: String) : Message()

Açıklama: data class Text, Message sealed class'ına miras verir.

3 Sealed + data kalıbını eşle

Kavram Anlamı
sealed class Message Kapalı üst sınıf
data class Text Alanlı alt tip
is Text -> m.content Smart cast ile erişim
when (m) Dallanma

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