0Pricing
Kotlin Academy · Pelajaran

when Lengkap dengan Hierarki Sealed

Tulislah ekspresi when lengkap yang mencakup setiap varian sealed.

when Lengkap dengan Hierarki Sealed adalah pelajaran Kotlin Academy gratis di CoddyKit. Ini adalah pelajaran 2 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.

Percabangan yang Mencakup Semua Kemungkinan

Ekspresi when yang digunakan sebagai ekspresi harus mencakup semua kemungkinan—setiap nilai yang mungkin harus ditangani. Hierarki tersegel memungkinkan kompilator memverifikasinya untuk Anda.

Percabangan Tidak Lengkap pada Tipe Terbuka

Untuk kelas biasa, kompilator tidak dapat memeriksa semua subtipe—kompilator mengharuskan cabang else.

open class Shape
class Circle : Shape()
class Square : Shape()
fun describe(s: Shape) = when (s) {
    is Circle -> "circle"
    is Square -> "square"
    else      -> "unknown" // required
}
fun main() { println(describe(Circle())) }

Percabangan Lengkap pada Tipe Tersegel

Untuk kelas tersegel, kompilator mengetahui semua subtipe. else tidak diperlukan jika setiap kasus sudah tercakup.

sealed class Result
class Success(val value: Int) : Result()
class Failure(val msg: String) : Result()
fun describe(r: Result) = when (r) {
    is Success -> "ok: ${r.value}"
    is Failure -> "err: ${r.msg}"
}
fun main() {
    println(describe(Success(42)))
    println(describe(Failure("nope")))
}

Antarmuka Tersegel

Antarmuka tersegel memberikan pemeriksaan kelengkapan bahkan saat kelas memerlukan pewarisan ganda.

sealed interface Animal
class Dog : Animal
class Cat : Animal
fun speak(a: Animal) = when (a) {
    is Dog -> "woof"
    is Cat -> "meow"
}
fun main() {
    println(speak(Dog()))
    println(speak(Cat()))
}

Pemeriksaan Tipe Otomatis di Cabang

Di dalam setiap cabang pemeriksaan tipe is, Kotlin secara otomatis mengonversi variabel ke tipe tertentu—tidak diperlukan konversi manual.

sealed class Event
data class Click(val x: Int, val y: Int) : Event()
data class Key(val char: Char) : Event()
fun handle(e: Event) = when (e) {
    is Click -> "clicked at (${e.x},${e.y})" // smart-cast
    is Key   -> "key=${e.char}"
}
fun main() {
    println(handle(Click(10, 20)))
    println(handle(Key('A')))
}

Melupakan Sebuah Kasus

Jika nanti Anda menambahkan varian baru, setiap when lengkap yang masih menggunakan tipe tersegel sebagai ekspresi akan gagal dikompilasi—ini menjadi jaring pengaman yang sangat baik.

sealed class Status
object Idle : Status()
object Running : Status()
// If we add object Done : Status(), every exhaustive when must update.
fun text(s: Status): String = when (s) {
    is Idle -> "idle"
    is Running -> "running"
}
fun main() { println(text(Idle)) }

Tipe Tersegel dengan Kelas Data

Pola umum: kelas data sebagai varian dalam hierarki tersegel.

sealed class UiState {
    object Loading : UiState()
    data class Success(val data: List<String>) : UiState()
    data class Error(val message: String) : UiState()
}
fun render(state: UiState) = when (state) {
    UiState.Loading -> "loading..."
    is UiState.Success -> "got ${state.data.size} items"
    is UiState.Error -> "error: ${state.message}"
}
fun main() {
    println(render(UiState.Loading))
    println(render(UiState.Success(listOf("a", "b"))))
    println(render(UiState.Error("404")))
}

Menggunakan Percabangan sebagai Pernyataan

Saat digunakan sebagai pernyataan (bukan ekspresi), when tidak harus mencakup semua kemungkinan. Namun, Anda kehilangan jaring pengamannya.

sealed class Cmd
object Start : Cmd()
object Stop : Cmd()
fun execute(c: Cmd) {
    // Statement form: no error if incomplete (avoid this style)
    when (c) {
        Start -> println("started")
        Stop -> println("stopped")
    }
}
fun main() { execute(Start); execute(Stop) }

Memaksa Pemeriksaan Kelengkapan pada Pernyataan

Tetapkan hasil when ke suatu nilai (atau gunakan trik .exhaustive) agar kompilator memastikan semua kasus ditangani.

sealed class Cmd
object Start : Cmd()
object Stop : Cmd()
fun execute(c: Cmd) {
    val handled: Unit = when (c) { // expression context now
        Start -> println("started")
        Stop -> println("stopped")
    }
}
fun main() { execute(Start) }

Cabang dengan Banyak Kasus

Kelompokkan kasus dengan koma untuk menggunakan isi yang sama pada beberapa varian.

sealed class Event
class Click : Event()
class Tap : Event()
class Drag : Event()
fun isPointer(e: Event) = when (e) {
    is Click, is Tap, is Drag -> true
}
fun main() { println(isPointer(Tap())) }

Tipe Tersegel Bertingkat

Hierarki tersegel dapat dibuat bertingkat—pemeriksaan kelengkapan tetap berfungsi pada pohon yang dalam.

sealed class Network {
    sealed class Wifi : Network() {
        object Open : Wifi()
        data class Secured(val ssid: String) : Wifi()
    }
    object Cellular : Network()
}
fun describe(n: Network) = when (n) {
    Network.Wifi.Open -> "open wifi"
    is Network.Wifi.Secured -> "secured: ${n.ssid}"
    Network.Cellular -> "cellular"
}
fun main() {
    println(describe(Network.Wifi.Secured("home")))
    println(describe(Network.Cellular))
}

Pemeriksaan Singkat

Apa manfaat utama menggunakan when dengan hierarki tersegel?

Ringkasan

Padukan kelas atau antarmuka tersegel dengan when untuk memastikan kelengkapan saat kompilasi. Pemeriksaan tipe otomatis menyederhanakan isi cabang. Gunakan sebagai ekspresi (atau tetapkan hasilnya) untuk memaksa pemeriksaan; kelompokkan kasus dengan koma; dan buat tipe tersegel bertingkat untuk status berbentuk pohon.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “when Lengkap dengan Hierarki Sealed” gratis?

Ya — teks lengkap “when Lengkap dengan Hierarki Sealed” 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 “when Lengkap dengan Hierarki Sealed”?

Tulislah ekspresi when lengkap yang mencakup setiap varian sealed. 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 2 dari 4.

Berapa lama pelajaran “when Lengkap dengan Hierarki Sealed” 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. sealed class vs sealed interface: Kapan Menggunakan Masing-Masing
  2. when Lengkap dengan Hierarki Sealed
  3. Memodelkan Status UI dengan Sealed Class
  4. Menumpuk dan Menggabungkan Hierarki Sealed
← Kembali ke Kotlin Academy