Soru tarihi:
Java 12 öncesinde switch operatörü yalnızca bir statement olarak kullanılıyordu. Java 12/14 ile birlikte switch ifadeleri (switch expression) ortaya çıktı ve operatörün sözdizimini ve olanaklarını genişletti. Switch ifadeleri, daha kısa ve anlamlı bir kod için tasarlanmıştır.
Sorun:
Klasik switch sık sık hatalara neden olur: unutulan break, fall-through'a yol açar, birçok case ile okunabilirliği zorlaştırır, sonucu doğrudan ifade içinde döndürme olanağı yoktur ve değerlerin kapsamlı bir kontrolü mevcut değildir.
Çözüm:
Switch ifadesi bir değer döndürebilir, ok işaretli sözdizimini kullanabilir, derleme aşamasında kapsamlı bir analiz destekleyebilir ve default aracılığıyla null'ı işleyebilir. Sözdizimi:
String result = switch(day) { case MONDAY, FRIDAY -> "Çalışma Günü"; case SATURDAY, SUNDAY -> "Hafta Sonu"; default -> throw new IllegalArgumentException(); };
Ana özellikler:
Switch enum, string ve null ile çalışabilir mi?
Enum ile Java 5'ten itibaren çalışır. String ile Java 7'den itibaren. Null yalnızca default aracılığıyla işlenir, aksi takdirde NPE ile karşılaşılır.
switch(day) { // day == null default: System.out.println("null"); } // çalışır
Eğer switch ifadesinde tüm enum seçeneklerini gerçekleştirmezseniz ne olur?
Derleyici, tüm değerler için default veya implementation talep eder. Bunun yokluğunda bir derleme hatası çıkar.
Yeni tür switch ifadesinde break kullanmak mümkün mü?
Ok işaretli versiyonda break'a gerek yoktur. Eğer bir blok (case X -> { ... }) kullanırsanız, değer döndürmek için yield kullanılabilir:
int num = switch(x) { case 1 -> 10; case 2 -> { yield 20; } default -> 0; };
Klasik switch, break olmadan int ile:
switch(type) { case 1: actionA(); case 2: actionB(); // hem type==1 hem de type==2'de çağrılır }
Artılar:
Eksiler:
Yeni switch ifadesini enum ile sonuç eşleştirmede kullanmak:
String status = switch(orderStatus) { case PAID -> "Ödenmiş"; case CANCELED -> "İptal Edildi"; default -> "İşlemde"; };
Artılar:
Eksiler: