CodeBlanks Logo Icon CodeBlanks

when ile enum

when ile enum üzerinde dallanmayı öğrenirsin.

when ile enum: tükenen dallar

when bir enum'un tüm sabitlerini sıralarsan else koymadan güvenle kullanılır. Yeni bir sabit eklersen derleyici yeni dalı ister; bu yüzden hata erken yakalanır.

fun describe(c: Color) = when (c) {
    Color.RED -> "kırmızı"
    Color.GREEN -> "yeşil"
    Color.BLUE -> "mavi"
}

Buna tükenen when denir; çünkü tüm sabitler tek tek yazılır. Eğer bir sabiti unutursan derleyici uyarı verir. Böylece yeni sabit eklemek güvenli olur; her dal gözden geçirilir.

Tükenme ve yeni sabit

Tükenen bir when'e yeni bir sabit eklersen derleyici seni uyarır. Bu, sabit eklemenın güvenli olduğu anlamına gelir.

enum class Color { RED, GREEN, BLUE }
// YELLOW eklersen describe fonksiyonu derlenmez
// tüm sabitleri içeren yeni bir dal gerekir

Uyarıyı görünce yeni dalı yazarsın; hiçbir sabit gözden kaçmaz. Bu, kodun ileride bozulmasını önler. else koymak yerine tüm sabitleri açıkça yazmak daha güvenlidir.

Uygulama Yönleri açıkla

Direction adında bir enum class tanımla: NORTH, SOUTH, EAST, WEST. fun describe(d: Direction): String yaz; when ile her yöne bir Türkçe kelime ver. main içinde describe(Direction.NORTH) çıktısını yazdır.

Başlangıç kodu

Main.kt
fun main() {
    // Bir yön türü tanımla; describe ile bir yönün adını yazdır
}

Örnek çözüm

Main.kt
enum class Direction { NORTH, SOUTH, EAST, WEST }

fun describe(d: Direction) = when (d) {
    Direction.NORTH -> "kuzey"
    Direction.SOUTH -> "güney"
    Direction.EAST -> "doğu"
    Direction.WEST -> "batı"
}

fun main() {
    println(describe(Direction.NORTH))
}

Beklenen çıktı

kuzey

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 when bir enum'un tüm sabitlerini listeliyorsa ne gerekmez?

  • else dalı gerekmez Doğru cevap
  • Döngü gerektirir
  • Sadece bir dalı işler
  • Sabitleri değiştirir

Açıklama: Tüm sabitler yazılırsa else gerekmez; derleyici yazar.

2 Boşluğu doldur: when dalı ekle

Soru
when (c) {
    Color.RED -> "kırmızı"
    ____ -> "yeşil"
}
Cevap
when (c) {
    Color.RED -> "kırmızı"
    Color.GREEN -> "yeşil"
}

Açıklama: Color.GREEN sabiti için dal ekledin.

3 Sabit ve karşılık eşleştir

Kavram Anlamı
Color.RED kırmızı
Color.GREEN yeşil
Color.BLUE mavi

Başlangıç bölümündeki tüm dersler