Mühürlü Result Hiyerarşileri
Özel sonuç türleri
Mühürlü Result Hiyerarşileri, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Kotlin Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Kotlin Academy kursu toplamda 4 dersten oluşur.
Yerleşik Result'ın Ötesinde
Kotlin'in Result türü, failure durumunda yalnızca bir istisna taşır. Çoğu zaman daha zengin ve türlendirilmiş hata bilgileri istersiniz. mühürlü sınıf hiyerarşisi, alanınızdaki sonuçları tam olarak modellemenizi sağlar.
Mühürlü Bir Outcome
Success ve hata alt sınıflarına sahip bir mühürlü tür tanımlayınız. Derleyici tüm durumları bilir ve eksiksiz işlemeyi mümkün kılar.
sealed class Outcome<out T> {
data class Ok<T>(val value: T) : Outcome<T>()
data class Err(val message: String) : Outcome<Nothing>()
}
fun main() {
val r: Outcome<Int> = Outcome.Ok(5)
println(r)
}Eksiksiz Koşul İfadesi
Tür mühürlü olduğu için üzerinde kullanılan bir when ifadesinin else dalına ihtiyacı yoktur ve derleyici her durumun ele alınmasını zorunlu kılar.
sealed class Outcome<out T> {
data class Ok<T>(val value: T) : Outcome<T>()
data class Err(val message: String) : Outcome<Nothing>()
}
fun describe(o: Outcome<Int>) = when (o) {
is Outcome.Ok -> "value " + o.value
is Outcome.Err -> "error " + o.message
}
fun main() {
println(describe(Outcome.Ok(9)))
println(describe(Outcome.Err("boom")))
}Türlendirilmiş Hata Varyantları
Farklı başarısızlık türlerini, her biri ilgili verileri taşıyan ayrı alt sınıflar olarak modelleyiniz. Bu yaklaşım, tek ve içeriği belirsiz bir istisnadan daha iyidir.
sealed class Fetch<out T> {
data class Success<T>(val data: T) : Fetch<T>()
data class NotFound(val id: Int) : Fetch<Nothing>()
data class Network(val code: Int) : Fetch<Nothing>()
}
fun main() {
val r: Fetch<String> = Fetch.NotFound(42)
println(r)
}Her Varyantı Ele Alma
Bir when ifadesi her hata türüne özel tepki verebilir ve her dal için tüm veriler kullanılabilir.
sealed class Fetch<out T> {
data class Success<T>(val data: T) : Fetch<T>()
data class NotFound(val id: Int) : Fetch<Nothing>()
data class Network(val code: Int) : Fetch<Nothing>()
}
fun handle(f: Fetch<String>) = when (f) {
is Fetch.Success -> "data: " + f.data
is Fetch.NotFound -> "missing id " + f.id
is Fetch.Network -> "net error " + f.code
}
fun main() {
println(handle(Fetch.Network(503)))
}Nothing Hilesi
Başarı değeri taşımayan hata varyantları Outcome<Nothing> kullanır. Nothing her türün alt türü olduğundan ve genel tür out olduğundan, bir hata herhangi bir Outcome<T> içine uyabilir.
sealed class Res<out T> {
data class Ok<T>(val v: T) : Res<T>()
object Empty : Res<Nothing>()
}
fun get(flag: Boolean): Res<String> =
if (flag) Res.Ok("hi") else Res.Empty
fun main() {
println(get(false))
}Durumsuz Durumlar İçin Nesne
Bir hata varyantı veri taşımıyorsa onu sınıf yerine tekil bir object olarak tanımlayınız.
sealed class Login {
data class Success(val user: String) : Login()
object WrongPassword : Login()
object Locked : Login()
}
fun main() {
val r: Login = Login.WrongPassword
println(r === Login.WrongPassword)
}Hiyerarşiyi Döndürme
İşlevler mühürlü türü döndürür; çağıranlar her sonucu ele almak zorunda olduğundan unutulmuş hata yolları ortadan kalkar.
sealed class Parsed {
data class Num(val value: Int) : Parsed()
data class Bad(val input: String) : Parsed()
}
fun parse(s: String): Parsed {
val n = s.toIntOrNull()
return if (n != null) Parsed.Num(n) else Parsed.Bad(s)
}
fun main() {
when (val r = parse("x")) {
is Parsed.Num -> println(r.value)
is Parsed.Bad -> println("bad: " + r.input)
}
}Mühürlü Result ve Yerleşik Result
Hızlı ve istisna tabanlı yakalama için yerleşik Result türünü kullanınız. Alanınıza özgü veriler taşıyan birden çok türlendirilmiş hata durumu ve eksiksiz işleme gerektiğinde özel bir mühürlü hiyerarşi kullanınız.
Hiyerarşiyi Tasarlama
İyi bir mühürlü sonuç tasarımı:
- Yükü taşıyan tek bir success varyantı
- Anlamlı her başarısızlık biçimi için bir alt sınıf
- Yalnızca hata taşıyan durumlar için
out Tdeğişkenliği veNothing
Güvenlik Ağı Olarak Derleyici
En büyük kazanım şudur: daha sonra yeni bir varyant eklediğinizde, eksiksiz olmayan her when bir derleme hatasına dönüşür ve onu ele almanız gereken her yeri gösterir. Hatalar fark edilmeden aradan sızamaz.
Hızlı Kontrol
Mühürlü sonuç hiyerarşileri konusundaki anlayışınızı sınayınız.
Özet
Mühürlü sonuç hiyerarşileri oluşturdunuz:
- Success ve türlendirilmiş hata varyantları
elseolmadan eksiksizwhen- Yalnızca hata taşıyan durumlar için
out TveNothing - Yeni varyantların ele alınmasını derleyicinin zorunlu kılması
Sıradaki konu: map ve recover ile işlevsel hata yönetimi.
Yapay zeka eğitmeniyle Kotlin öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 51
- Dersler
- 203
Sıkça Sorulan Sorular
“Mühürlü Result Hiyerarşileri” dersi ücretsiz mi?
Evet — “Mühürlü Result Hiyerarşileri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Kotlin Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Kotlin Academy kursu toplamda 4 dersten oluşur.
“Mühürlü Result Hiyerarşileri” dersinde ne öğreneceğim?
Özel sonuç türleri Kotlin Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Kotlin Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Kotlin Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Mühürlü Result Hiyerarşileri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Kotlin Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Kotlin Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Result Türü
- runCatching
- Mühürlü Result Hiyerarşileri
- İşlevsel Hata İşleme