Sunday, April 21, 2019

Java 12'de switch Kullanımı

Bir değişkenin belirli değerleri için uygulamanın akışını değiştirmek amacıyla switch ifadesinden yararlanıyoruz. switch ifadesi parametre olarak bir değişken alır. Bu değişkenin byte, short, int, char, enum tiplerinden biri olması gerekir. Java 7 ile birlikte bu listeye String sınıfı da eklenmiştir. Geleneksel switch kullanımına ilişkin bir örneğini aşağıda bulabilirsiniz:

int weekDay = 3;  
String status;
switch(weekDay) {
 case 1: 
 case 2: 
 case 3: 
 case 4: 
 case 5: status = "working";
         break;
 case 6: 
 case 7: status = "resting";
  break;
 default: status = "unknown";
}

Burada int tipinden weekDay değişkeninin 1 ile 7 arasındaki değerleri için String tipinden status değişkenine farklı değerler atamak istiyoruz: "working", "resting" ve "unknown". switch'in bu kullanımı ile ilgili iki temel problem bulunuyor:
  • switch değişkeninin (weekDay) bir aralıktaki değerleri için özel bir gösterim bulunmuyor. O nedenle, yukarıda weekDay değişkeninin [1-5] aralığındaki değerlerini karşılaştırmak üzere aralıktaki her bir değer için case tanımlamak zorunda kaldık. 
  • switch değişkeninin değeri, case ile verilen sabitler ile olan eşitliği sırayla sınanır. Eğitlik olduğunda tüm case ifadeleri eşitliğine bakılmaksızın break ile karşılaşıncaya kadar çalıştırılır. switch yapısında break kullanımı tercihe bağlıdır. Unutulmuş olması ya da yerinde kullanılmaması yanlış bir akışa yol açacaktır ve okumayı güçleştirmektedir.
Java 12 ile birlikte yukarıdaki problemleri çözmeyi hedefleyen yeni bir dizi switch gösterimi gelmiştir. Bu yazıda bu gösterimlere bakacağız. İlk gösterimde case sabitlerini virgüllerle ayrılmış bir liste olarak tanımlayabiliyoruz:

int weekDay = 3;  
String status;
switch(weekDay) {
 case 1,2,3,4,5: status = "working";
      break;
 case 6,7: status = "resting";
      break;
 default: status = "unknown";
}

Bu gösterimde break kullanımına dikkat edilmesi gerekiyor. İkinci gösterimde ise break kullanımına ihtiyaç duymuyoruz:

int weekDay = 3;  
String status;
switch (weekDay) {
 case 1, 2, 3, 4, 5 -> {
  status = "working";
 }
 case 6, 7 -> {
  status = "resting";
 }
 default -> {
  status = "unknown";
 }
}

Bu gösterimde lambda ifadesi gösteriminden yararlanıldığını görüyoruz. Eğer amacınız yukarıdaki örneklerde olduğu gibi case değerlerine göre bir değişkenin değerini belirlemek ise bunu daha yalın bir gösterimle yapabilirsiniz:

var weekDay = 3;  
var status = switch (weekDay) {
 case 1, 2, 3, 4, 5 -> "working";
 case 6, 7 -> "resting";
 default -> "unknown";
};

Bu gösterimde lambda ifadesi değişkenin değerini dönüyor. Lambda ifadesinin kullanıldığı yukarıdaki gösterim yerine break ile değeri döndüğümüz gösterimi de kullanabilirsiniz:

var weekDay = 3;  
var status = switch (weekDay) {
 case 1, 2, 3, 4, 5 : break "working";
 case 6, 7 : break "resting";
 default : break "unknown";
};

Yukarıdaki gösterimin bir başka yazılımı aşağıda verilmiştir:

var weekDay = 3;  
var status = switch (weekDay) {
 case 1, 2, 3, 4, 5 -> { break "working"; }
 case 6, 7 -> { break  "resting" ;}
 default -> { break "unknown"; }
};

Bu yazıda Java 12 ile birlikte gelen yeni switch gösteriminin dört farklı yüzünü inceledik. Lambda ifadesi gösteriminin kullanıldığı switch ifadelerinin daha okunabilir olduğu söylenebilir.

No comments:

Post a Comment