Kotlin
Ö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.
Örnek çözümü göster
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))
}
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.
Örnek çözümü göster
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))
}
Kendini test et
-
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
Cevabı göster
Tüm when ifadeleri derleme hatası verir ve yeni dalı eklemeyi zorlar — Tüm when ifadeleri derleme hatası verir ve yeni dalı eklemeyi zorlar.
-
when dalını tamamla
fun process(r: ApiResult): String {
return when (r) {
____ -> "veri: ${r.data}"
is Failure -> "sorun: ${r.error}"
}
}
Cevabı göster
fun process(r: ApiResult): String {
return when (r) {
is Success -> "veri: ${r.data}"
is Failure -> "sorun: ${r.error}"
}
}
Sıradaki ders: object