Kotlin Academy · Ders

Mühürlü Result Hiyerarşileri

Özel sonuç türleri

3. ders / 413 adım

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 T değişkenliği ve Nothing

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ı
  • else olmadan eksiksiz when
  • Yalnızca hata taşıyan durumlar için out T ve Nothing
  • Yeni varyantların ele alınmasını derleyicinin zorunlu kılması

Sıradaki konu: map ve recover ile işlevsel hata yönetimi.

Başlamak ücretsiz

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

  1. Result Türü
  2. runCatching
  3. Mühürlü Result Hiyerarşileri
  4. İşlevsel Hata İşleme
← Kotlin Academy Sayfasına Dön