Özet - Sealed class
- Kotlin kursu
- Orta seviye
- Ders 29/116
- 5 dk
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
// 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
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
// 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
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
fun process(r: ApiResult): String {
return when (r) {
____ -> "veri: ${r.data}"
is Failure -> "sorun: ${r.error}"
}
}
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.