Kotlin Academy · Pelajaran

when Menyeluruh

Cakup semua kasus

Pelajaran 4 dari 413 langkah

when Menyeluruh adalah pelajaran Kotlin Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.

Mencakup Semua Kasus

when yang mencakup semua kemungkinan menangani setiap nilai yang mungkin. Saat digunakan sebagai ekspresi, Kotlin mewajibkan hal ini agar hasil selalu dihasilkan.

Pelajaran ini menunjukkan cara membuat when mencakup semua kemungkinan dan alasan hal itu membantu.

Cabang lainnya Mencakup Semua Kasus

Untuk subjek terbuka seperti Int, cabang else mencakup semua hal yang tidak tercantum.

Ini menjamin percabangan when selalu menemukan kecocokan.

fun label(n: Int): String = when (n) {
    0 -> "zero"
    1 -> "one"
    else -> "many"
}

fun main() {
    println(label(0))
    println(label(5))
}

Enumerasi Memungkinkan Cakupan Lengkap

Dengan enumerasi, kompiler mengetahui setiap nilai yang mungkin. Cantumkan semuanya dan Anda boleh menghilangkan else.

enum class Direction { NORTH, SOUTH, EAST, WEST }

fun turn(d: Direction): String = when (d) {
    Direction.NORTH -> "up"
    Direction.SOUTH -> "down"
    Direction.EAST -> "right"
    Direction.WEST -> "left"
}

fun main() {
    println(turn(Direction.EAST))
}

Kasus Enumerasi yang Terlewat

Jika Anda melupakan sebuah nilai enumerasi dalam ekspresi when, kompiler melaporkan kesalahan.

Ini menemukan kekeliruan saat Anda menambahkan konstanta enumerasi baru.

enum class Status { ACTIVE, PAUSED, STOPPED }

fun describe(s: Status): String = when (s) {
    Status.ACTIVE -> "running"
    Status.PAUSED -> "paused"
    Status.STOPPED -> "stopped"
}

fun main() {
    println(describe(Status.PAUSED))
}

Kelas Tersegel

Kelas tersegel memiliki sekumpulan subkelas tetap yang diketahui saat kompilasi.

Hal ini memungkinkan when mencakup semua subtipe tanpa else.

sealed class Shape
class Circle(val r: Double) : Shape()
class Square(val s: Double) : Shape()

fun area(shape: Shape): Double = when (shape) {
    is Circle -> 3.14159 * shape.r * shape.r
    is Square -> shape.s * shape.s
}

fun main() {
    println(area(Square(4.0)))
}

Mengapa Cakupan Lengkap Membantu

when yang mencakup semua kasus mengubah kasus yang terlewat menjadi kesalahan kompilasi, bukan kekeliruan yang tidak terlihat.

Tambahkan subkelas atau nilai enumerasi baru, dan kompiler akan menunjukkan setiap when yang harus Anda perbarui.

Pernyataan Tidak Wajib Mencakup Semua Kasus

Saat digunakan sebagai pernyataan (bukan ditetapkan ke suatu nilai), when tidak memerlukan cakupan semua kasus.

Namun, untuk enumerasi dan tipe tersegel, tetap mencakup semua kasus merupakan praktik yang baik.

enum class Light { RED, GREEN }

fun main() {
    val light = Light.RED
    when (light) {
        Light.RED -> println("stop")
        Light.GREEN -> println("go")
    }
}

Menggabungkan Kelas Tersegel dan Data

Hierarki tersegel sering menggunakan subkelas kelas data, sehingga Anda mendapatkan pencocokan menyeluruh sekaligus konversi tipe cerdas untuk mengakses properti.

sealed class Result
data class Ok(val value: Int) : Result()
data class Err(val message: String) : Result()

fun show(r: Result): String = when (r) {
    is Ok -> "ok: " + r.value
    is Err -> "error: " + r.message
}

fun main() {
    println(show(Ok(42)))
    println(show(Err("boom")))
}

Cabang lainnya sebagai Jaring Pengaman

Anda tetap dapat menambahkan else ke when bertipe tersegel atau enumerasi, tetapi setelah itu kompiler tidak lagi memperingatkan tentang kasus baru.

Menghilangkan else mempertahankan keamanan saat kompilasi, jadi sebaiknya lakukan itu untuk tipe tertutup.

enum class Coin { HEADS, TAILS }

fun flip(c: Coin): Int = when (c) {
    Coin.HEADS -> 1
    Coin.TAILS -> 0
}

fun main() {
    println(flip(Coin.HEADS))
}

Nilai Logika dan Subjek Tertutup

Boolean hanya memiliki dua nilai, jadi mencantumkan keduanya membuat when mencakup semua kasus tanpa else.

fun yesNo(flag: Boolean): String = when (flag) {
    true -> "yes"
    false -> "no"
}

fun main() {
    println(yesNo(true))
    println(yesNo(false))
}

Menyatukan Semuanya

when yang mencakup semua kasus berarti semua kasus telah tercakup:

  • else mencakup subjek terbuka seperti Int
  • Enumerasi, kelas tersegel, dan Boolean dapat mencakup semua kasus tanpa else
  • Kompiler menandai kasus yang terlewat saat Anda menambahkan kasus baru
sealed class Event
object Start : Event()
object Stop : Event()

fun handle(e: Event): String = when (e) {
    is Start -> "starting"
    is Stop -> "stopping"
}

fun main() {
    println(handle(Start))
    println(handle(Stop))
}

Uji Cepat

Ujilah pemahaman Anda tentang when yang mencakup semua kasus.

Rangkuman

Anda telah mempelajari cara membuat when mencakup semua kasus:

  • else menangani subjek terbuka
  • Enumerasi, kelas tersegel, dan Boolean dapat tercakup sepenuhnya
  • Pemeriksaan saat kompilasi menemukan kasus yang terlewat

Dengan demikian, kursus Ekspresi When dan Konversi Tipe Cerdas selesai.

Gratis untuk memulai

Belajar Kotlin dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
51
Pelajaran
203

Pertanyaan yang Sering Diajukan

Apakah pelajaran “when Menyeluruh” gratis?

Ya — teks lengkap “when Menyeluruh” 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 Menyeluruh”?

Cakup semua kasus 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 4 dari 4.

Berapa lama pelajaran “when Menyeluruh” 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. when sebagai Ekspresi
  2. Pemeriksaan Cerdas
  3. Operator is dan as
  4. when Menyeluruh
← Kembali ke Kotlin Academy