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 TdenganNothinguntuk 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
whenmenyeluruh tanpaelseout TdanNothinguntuk 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
- Tipe Result
- runCatching
- Hierarki Result Tersegel
- Penanganan Error Fungsional