Enum'larla Switch İfadeleri
Temiz ve tüm durumları kapsayan dallanma için modern switch ifadelerini enum'larla kullanın.
Enum'larla Switch İfadeleri, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
Numaralandırmalarla Seçim İfadeleri
Numaralandırmalarla kullanılan seçim ifadeleri (Java 14+), tüm durumları kapsayan ve kısa tür tabanlı yönlendirme sağlar. Tüm numaralandırma sabitleri ele alındığında default gerekmez.
Geleneksel Seçim Deyimi
Klasik seçim deyimi numaralandırmalarla çalışır ancak sonraki duruma geçişi önlemek için break gerektirir.
enum Severity { LOW, MEDIUM, HIGH, CRITICAL }
Severity s = Severity.HIGH;
String action;
switch (s) {
case LOW:
action = "Log and monitor";
break;
case MEDIUM:
action = "Notify on-call team";
break;
case HIGH:
action = "Page engineer immediately";
break;
case CRITICAL:
action = "Activate incident response";
break;
default:
action = "Unknown";
}
System.out.println(action); // Page engineer immediatelyOk Etiketli Seçim İfadesi
Ok etiketli seçim ifadeleri, sonraki duruma geçişi ve break kullanımını ortadan kaldırır. Bir değer üretir ve tüm durumları kapsaması gerekir.
enum Severity { LOW, MEDIUM, HIGH, CRITICAL }
Severity s = Severity.HIGH;
String action = switch (s) {
case LOW -> "Log and monitor";
case MEDIUM -> "Notify on-call team";
case HIGH -> "Page engineer immediately";
case CRITICAL -> "Activate incident response";
// no default needed — all cases covered
};
System.out.println(action); // Page engineer immediatelyBloklarla Seçim İfadesi
Durum mantığı birden çok deyim gerektirdiğinde, sonuç değerini üretmek için yield içeren bir blok kullanınız.
enum DayOfWeek { MON, TUE, WED, THU, FRI, SAT, SUN }
DayOfWeek day = DayOfWeek.FRI;
int hoursOpen = switch (day) {
case MON, TUE, WED, THU -> 8;
case FRI -> {
System.out.println("Half day on Friday!");
yield 4; // yield returns value from block
}
case SAT, SUN -> 0;
};
System.out.println("Hours open: " + hoursOpen); // Hours open: 4Birden Çok Durumu Gruplama
Birden çok numaralandırma sabiti, virgülle ayırma kullanılarak aynı durumla ilişkilendirilebilir.
enum Season { SPRING, SUMMER, FALL, WINTER }
Season season = Season.SUMMER;
String activity = switch (season) {
case SPRING, FALL -> "Hike in the mountains";
case SUMMER -> "Beach vacation";
case WINTER -> "Ski at the resort";
};
System.out.println(activity); // Beach vacationSeçim İfadeleriyle Yöntemlerden Dönüş
Seçim ifadeleri, yöntemlerde dönüş deyimleri olarak çok iyi çalışır ve amacı açıkça ortaya koyar.
enum Priority { LOW, NORMAL, HIGH, URGENT }
static int getSlaHours(Priority p) {
return switch (p) {
case LOW -> 72;
case NORMAL -> 24;
case HIGH -> 4;
case URGENT -> 1;
};
}
System.out.println(getSlaHours(Priority.URGENT)); // 1
System.out.println(getSlaHours(Priority.LOW)); // 72Akışta Seçim İfadesi
Seçim ifadeleri, her öğe için temiz dönüşümler gerçekleştirmek amacıyla akış işlemlerinin içinde kullanılabilir.
import java.util.*;
import java.util.stream.*;
enum Status { PENDING, ACTIVE, CLOSED }
record Account(String id, Status status) {}
List<Account> accounts = List.of(
new Account("A1", Status.ACTIVE),
new Account("A2", Status.PENDING),
new Account("A3", Status.CLOSED)
);
accounts.stream()
.map(a -> a.id() + ": " + switch (a.status()) {
case ACTIVE -> "\u2705 Live";
case PENDING -> "\u23f3 Awaiting activation";
case CLOSED -> "\u274c Deactivated";
})
.forEach(System.out::println);Derleme Zamanında Tüm Durumların Kapsanması
Derleyici, tüm numaralandırma sabitlerinin kapsanmasını zorunlu kılar. Bir numaralandırma türüne yeni bir sabit eklendiğinde, bu sabiti işlemeyen tüm seçim ifadelerinde derleme hataları oluşur.
enum Color { RED, GREEN, BLUE } // add YELLOW here → compile error below
Color c = Color.GREEN;
// This switch is exhaustive for RED, GREEN, BLUE
// If you add YELLOW to the enum without adding a case here,
// the compiler will report an error.
String hex = switch (c) {
case RED -> "#FF0000";
case GREEN -> "#00FF00";
case BLUE -> "#0000FF";
};
System.out.println(hex); // #00FF00Güvenlik İçin Varsayılan Durumlu Seçim
Bir seçim deyimi (ifade değil) kullanırken veya seçim yalnızca bazı durumları bilerek kapsıyorsa bir varsayılan durum ekleyin.
enum Feature { DARK_MODE, PUSH_NOTIFICATIONS, ANALYTICS, BETA_FEATURE }
static boolean isEnabled(Feature feature) {
return switch (feature) {
case DARK_MODE, PUSH_NOTIFICATIONS -> true;
case ANALYTICS -> false;
default -> {
System.out.println("Unknown feature: " + feature);
yield false;
}
};
}
System.out.println(isEnabled(Feature.DARK_MODE)); // true
System.out.println(isEnabled(Feature.BETA_FEATURE)); // falseUygulama: Sipariş Yaşam Döngüsü
İzin verilen geçişleri belirlemek için seçim ifadesi kullanan eksiksiz bir sipariş yaşam döngüsü durum makinesi.
enum OrderState { CART, PENDING, CONFIRMED, SHIPPED, DELIVERED, CANCELLED }
static Set<OrderState> allowedTransitions(OrderState from) {
return switch (from) {
case CART -> Set.of(OrderState.PENDING, OrderState.CANCELLED);
case PENDING -> Set.of(OrderState.CONFIRMED, OrderState.CANCELLED);
case CONFIRMED -> Set.of(OrderState.SHIPPED);
case SHIPPED -> Set.of(OrderState.DELIVERED);
case DELIVERED, CANCELLED -> Set.of(); // terminal states
};
}
System.out.println(allowedTransitions(OrderState.PENDING));
// [CONFIRMED, CANCELLED]String ile Numaralandırma Türü Üzerinde Seçim
String üzerinde seçim yapmak bir null denetimi gerektirir ve büyük/küçük harfe duyarlıdır. Bir numaralandırma türü üzerinde seçim yapmak null açısından güvenlidir (null ise NPE oluşur) ve tür güvenliği sağlar; değer kümesi biliniyorsa numaralandırma türlerini tercih edin.
// String switch — fragile
String role = "admin";
String label = switch (role.toLowerCase()) {
case "admin" -> "Administrator";
case "guest" -> "Guest User";
default -> "Unknown";
};
// Enum switch — type-safe
enum Role { ADMIN, GUEST }
Role r = Role.ADMIN;
String label2 = switch (r) {
case ADMIN -> "Administrator";
case GUEST -> "Guest User";
};
System.out.println(label2); // AdministratorKısa Denetim
4 sabiti olan bir numaralandırma türünüz var ve 4'ünü de kapsayan bir seçim ifadesi yazıyorsunuz. Numaralandırma türüne 5. bir sabit eklerseniz ne olur?
Özet: Numaralandırma Türleriyle Seçim İfadeleri
Temel çıkarımlar:
- Ok etiketli seçim ifadeleri, break kullanımını ve durumların birbirine sarkmasını ortadan kaldırır
- Blok içeren bir durumda değer döndürmek için yield kullanın
- Birden çok sabiti virgülle gruplayın: case A, B ->
- Tüm sabitler kapsandığında, kapsamlı seçim ifadelerinde varsayılan durum gerekmez
- Yeni bir numaralandırma sabiti eklemek, kapsamlı seçim ifadelerinde derleme hatalarına neden olur
- Seçim ifadeleri, akıştaki map() işlemlerinde çok kullanışlıdır
Sıkça Sorulan Sorular
“Enum'larla Switch İfadeleri” dersi ücretsiz mi?
Evet — “Enum'larla Switch İfadeleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“Enum'larla Switch İfadeleri” dersinde ne öğreneceğim?
Temiz ve tüm durumları kapsayan dallanma için modern switch ifadelerini enum'larla kullanın. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Enum'larla Switch İfadeleri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Enum Tanımlama ve Kullanma
- Alanlara ve Yöntemlere Sahip Enum'lar
- Enum'larla Switch İfadeleri
- EnumSet ve EnumMap