Menu

Java switch Deyimi: case'ler, Fall-Through ve Ok Söz Dizimi

Java switch deyimi açıklandı: case etiketleri, break ve fall-through, default dalı, case'leri gruplama, modern ok biçimi ve switch ifadeleri.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

switch Ne İşe Yarar

Bir switch, bir değeri sabit seçeneklerden oluşan bir listeyle karşılaştırır ve eşleşen dalı çalıştırır. Kendini aynı değişkeni farklı sabitlerle test etmeye devam eden uzun bir if/else if zinciri yazarken bulduğunda, bir switch aynı şeyi daha açık bir şekilde söyler.

Yalnızca derleme zamanı sabitlerine karşı eşitlik kontrolü yapar; aralıkları test edemez ya da koşulları birleştiremez. Bunlar için if/else ile kal.

Klasik switch Deyimi

Geleneksel biçim, iki nokta üst üste ile case etiketleri ve her daldan sonra bir break kullanır:

Java day'i değerlendirir, eşleşen case'e atlar, ifadelerini çalıştırır ve break switch'ten çıkar. default dalı başka hiçbir şey eşleşmediğinde çalışır; onu else gibi düşün. İsteğe bağlıdır, ancak onu eklemek iyi bir uygulamadır; böylece beklenmeyen değerler sessizce sıvışıp gitmez.

break Tuzağı: Fall-Through

Bu, tüm switch hatalarının en yaygınıdır. Bir break atlarsan, yürütme eşleşen bir case'in sonunda durmaz; bir sonraki case'e düşer ve bir break'e ya da kapanış parantezine ulaşana kadar çalışmaya devam eder:

Yalnızca Level 1 bekleyebilirsin, ama bu üç satırın hepsini yazdırır. case 1'in break'i olmadığı için, denetim doğrudan case 2 ve case 3'e kayar. Gerçekten fall-through istemediğin sürece her zaman break ekle; ve buna bilerek dayandığında, bir sonraki okuyucu bunun kasıtlı olduğunu bilsin diye bir yorum bırak.

case'leri Gruplama

Fall-through'un meşru ve düzenli bir kullanımı vardır: birkaç değerin tek bir bloğu paylaşması için case etiketlerini üst üste yığmak. Etiketleri aralarında kod olmadan arka arkaya koy:

Burada 'A', 'B' ve 'C' hepsi aynı "Pass" satırını çalıştırır. Bu, "bu değerlerden herhangi biri aynı şeyi yapar" demenin amaçlanan yoludur.

String'ler Üzerinde switch

Sayılarla sınırlı değilsin. Java 7'den beri bir String üzerinde switch yapabilirsin; bu, menü seçimleri ya da komut adları için mükemmeldir:

Eşleştirme büyük/küçük harfe duyarlıdır; "Stop", "stop" ile eşleşmez, dolayısıyla girdinin harf durumu değişkenlik gösteriyorsa önce normalize et (örneğin command.toLowerCase()). Bir tuzak daha: eğer command null ise, switch bir NullPointerException fırlatır, bu yüzden ona ulaşmadan önce null'a karşı önlem al.

Modern Ok Söz Dizimi

Daha yeni Java (14+), tasarımı gereği fall-through tuzağını gideren bir ok biçimi, case label -> ... ekler. Her ok case'i tam olarak bir dal çalıştırır ve asla düşmez, dolayısıyla unutulacak bir break yoktur:

Etiketleri üst üste yığmak yerine değerleri bir virgülle (case 6, 7) grupladığına ve ortada tek bir break bile olmadığına dikkat et. Birden çok ifade için bir blok kullan: case 1 -> { ...; ... }. Yeni kodda bu biçimi tercih et; daha kısadır ve bütün bir hata sınıfını ortadan kaldırır.

İfade Olarak switch

Ok biçimi ayrıca bir değer üretebilir. Bir switch ifadesi, doğrudan bir değişkene atayabileceğin bir sonuç döndürür; geçici değişken yok, her dalda tekrar eden atama yok:

Tüm switch (...) { ... }, days'te saklanan bir sayıya değerlenir. Kapanış parantezinden sonraki noktalı virgüle dikkat et; o, atama deyiminin bir parçasıdır. Bir switch ifadesi kapsayıcı olmalıdır (olası her değeri kapsamalıdır), default'un burada olmasının nedeni budur. Bir dalın bir değer döndürmeden önce birden çok ifadeye ihtiyacı varsa, yield ile bir blok kullan:

case 2 -> {
    boolean leap = (year % 4 == 0);
    yield leap ? 29 : 28;
}

yield, bir ok bloğunun değerini geri verme şeklidir; ifade dünyasında, bir sonuç taşıyan break'in karşılığıdır.

Sonraki: for Döngüleri

switch birçok dal arasından birini seçer; bazen ise bunun yerine bir bloğu birçok kez tekrarlamak istersin. for döngüsü kodu kontrollü bir sayıda çalıştırır (bir aralıkta sayarak ya da her öğeyi adımlayarak) ve bir sonraki sayfadır.

Sıkça Sorulan Sorular

Java'da if-else yerine switch'i ne zaman kullanmalıyım?

Bir değeri birçok sabit, değişmez seçenekle karşılaştırdığında switch kullan; örneğin bir gün numarası, bir menü seçimi ya da bir enum gibi. Uzun bir if/else if zincirinden daha açık okunur ve "bu bilinen değerlerden birini seç" mesajını verir. Koşulların aralıklar (x > 10), birden fazla değişken ya da bir sabite karşı basit eşitlik kontrolü olmayan herhangi bir şey içerdiğinde if/else ile kal.

Java switch deyiminde neden break'e ihtiyacım var?

Klasik iki nokta söz diziminde, bir case eşleştiğinde, yürütme bir break'e ya da switch'in sonuna ulaşana kadar sonraki case'lere düşer. break bunu durdurur. Onu unutmak klasik bir hatadır: case 1: ile eşleşirsin ve yanlışlıkla case 2:, case 3: ve devamının kodunu da çalıştırırsın. Daha yeni ok söz dizimi (case 1 -> ...) asla düşmez, bu yüzden hiç break yazmazsın.

Java switch deyimi String'lerle çalışabilir mi?

Evet. Java 7'den beri bir String üzerinde switch yapabilirsin; ayrıca int, char, byte, short, bunların sarmalayıcı (wrapper) türleri ve enum değerleri üzerinde de switch yapabilirsin. long, double, float ya da boolean üzerinde switch yapamazsın. String eşleştirme büyük/küçük harfe duyarlıdır, dolayısıyla "Yes" ve "yes" farklı case'lerdir.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA