0Pricing
Kotlin Academy · Pelajaran

Hierarki Result Tersegel

Tipe hasil kustom

Hierarki Result Tersegel adalah pelajaran Kotlin Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Kotlin Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Kotlin Academy mencakup 4 pelajaran total.

Melampaui Result Bawaan

Result Kotlin hanya membawa pengecualian saat failure. Sering kali Anda menginginkan informasi kesalahan yang lebih kaya dan bertipe. Hierarki kelas tersegel memungkinkan Anda memodelkan hasil yang benar-benar dimiliki ranah Anda.

Hasil Tersegel

Tentukan tipe tersegel dengan subkelas success dan kesalahan. Kompilator mengetahui semua kasus, sehingga penanganan yang lengkap dapat dilakukan.

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)
}

Pencocokan Kasus yang Menyeluruh

Karena tipe tersebut tersegel, when atas tipe itu tidak memerlukan else, dan kompilator memastikan setiap kasus ditangani.

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")))
}

Varian Kesalahan Bertipe

Modelkan jenis kegagalan yang berbeda sebagai subkelas terpisah, masing-masing membawa data yang relevan. Cara ini lebih baik daripada satu pengecualian buram.

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)
}

Menangani Setiap Varian

Sebuah when dapat merespons secara khusus setiap tipe kesalahan, dengan seluruh data yang tersedia untuk setiap cabang.

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)))
}

Trik Nothing

Varian kesalahan yang tidak memuat nilai success menggunakan Outcome<Nothing>. Karena Nothing adalah subtipe dari setiap tipe dan generiknya bersifat out, kesalahan tersebut cocok dengan Outcome<T> apa pun.

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))
}

Object untuk Kasus Tanpa Status

Jika varian kesalahan tidak membawa data, deklarasikan sebagai singleton object, bukan sebagai kelas.

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)
}

Mengembalikan Hierarki

Fungsi mengembalikan tipe tersegel; pemanggil harus menangani setiap hasil, sehingga jalur kesalahan yang terlupakan dapat dihilangkan.

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)
    }
}

Sealed Dibandingkan dengan Result Bawaan

Gunakan Result bawaan untuk penangkapan cepat berbasis pengecualian. Gunakan hierarki tersegel khusus saat Anda memerlukan beberapa kasus kesalahan bertipe dengan data khusus ranah serta penanganan yang menyeluruh.

Merancang Hierarki

Desain hasil tersegel yang baik:

  • Satu varian success yang membawa muatan
  • Satu subkelas untuk setiap mode kegagalan yang bermakna
  • Variansi out T dengan Nothing untuk kasus yang hanya berisi kesalahan

Kompilator sebagai Jaring Pengaman

Keuntungan terbesarnya: saat Anda menambahkan varian baru nanti, setiap when yang tidak menangani semua kasus akan menjadi kesalahan kompilasi, dan menunjukkan setiap tempat yang harus diperbarui. Kesalahan tidak dapat lolos secara diam-diam.

Pemeriksaan Singkat

Uji pemahaman Anda tentang hierarki hasil tersegel.

Ringkasan

Anda telah membangun hierarki hasil tersegel:

  • Success beserta varian kesalahan bertipe
  • when menyeluruh tanpa else
  • out T dan Nothing untuk kasus yang hanya berisi kesalahan
  • Penanganan varian baru yang dipastikan oleh kompilator

Berikutnya: penanganan kesalahan fungsional dengan map dan recover.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Hierarki Result Tersegel” gratis?

Ya — teks lengkap “Hierarki Result Tersegel” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Kotlin Academy, upgrade ke CoddyKit PRO. Kursus Kotlin Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Hierarki Result Tersegel”?

Tipe hasil kustom Kamu berlatih Kotlin Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Kotlin Academy?

Tidak diperlukan pengalaman sebelumnya. Kotlin Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Hierarki Result Tersegel” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Kotlin Academy ini?

Ya. Setiap pelajaran Kotlin Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Tipe Result
  2. runCatching
  3. Hierarki Result Tersegel
  4. Penanganan Error Fungsional
← Kembali ke Kotlin Academy