Sealed ve data
- Kotlin kursu
- Orta seviye
- Ders 26/116
- 5 dk
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
// 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
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
data class Text(val content: String) : ____()
data class Image(val url: String) : Message()
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 |