anahtar, kasa, varsayılan - 1

"Merhaba, Amigo!"

"Merhaba Bilaabo! Seni tekrar görmek ne güzel. Sadece derslerin çok iyi ve anlaşılır. Bu Java Bellek Modeli gibi değil."

"Evet, Bilaabo ders seçmeyi biliyor. Bugün size geçiş ifadesinden bahsedeceğim."

"Sanırım biri bana bundan bahsetmişti."

"Ellie yaptı. Yani, Amigo geçiş deyimi hakkında bir ders duymak istemiyor? Belki kendi dersini öğretmeye başlarsın?"

"Hayır, istiyorum, istiyorum. Switch deyimini dinleyelim."

"Tamam. Java'da switch deyimi denen bir şey var. Bir değişkenin çeşitli değerlerine bağlı olarak belirli eylemleri gerçekleştirmeniz gerektiğinde kullanışlıdır."

Anahtarlı örnek eşdeğer kod
int i = 5;
switch(i)
{
 case 1:
  System.out.println("one");
  break;
 case 2:
  System.out.println("two");
  break;
 case 3:
  System.out.println("three");
  break;
 default:
  System.out.println("many");
}
int i = 5;
if (i == 1)
{
 System.out.println("one");
}
else if (i == 2)
{
 System.out.println("two");
}
else if (i == 3)
{
 System.out.println("three");
}
else
{
 System.out.println("many");
}

Switch deyimi, kendisine iletilen değişken , anahtar kelime durumunu izleyen değerle eşleşirse, istenen kod parçasına atlamanıza izin verir.

i 1 ise, yürütme «durum 1» olarak işaretlenmiş satıra atlayacaktır.

i 2 ise, yürütme «durum 2» olarak işaretlenmiş satıra atlayacaktır.

i 3 ise, yürütme «durum 3» olarak işaretlenmiş satıra atlayacaktır.

"Vakalardan herhangi birine atlama yoksa, «varsayılan» blok yürütülür."

"Anlıyorum. Sağda da aynı mantık var ama if ifadeleri kullanılarak mı uygulanıyor?"

"Evet."

"Ve 'break' kelimesinin nesi var? Sadece döngülerde kullanılabileceğini söyledin?"

"Evet ve burada. Break ifadesi yürütüldüğünde, hemen anahtardan çıkarız ."

"Ama break deyimi kaldırılırsa, anahtarın içindeki tüm satırlar sonuna kadar yürütülür."

Örnek Çıktı (i = 1 için) Çıktı (i = 2 için)
switch(i)
{
 case 1:
  System.out.println("one");
 case 2:
  System.out.println("two");
 case 3:
  System.out.println("three");
 default:
  System.out.println("many"); }
bir
iki
üç
çok
iki
üç
çok

"Aslında case, koddaki bir etikettir. Switch deyiminde, bir sonraki etikete atlarız ve anahtarın sonuna veya bir break deyimiyle karşılaşana kadar tüm kodu çalıştırmaya başlarız."

"Yani, eğer break yazmazsak, atladığımız satır yürütülecek ve ardından kapanış parantezine kadar diğer tüm satırlar gelecek. Doğru mu?"

"Evet."

"Çok kolay. Ama if deyimlerini kullanmayı daha çok seviyorum. Bu anlamsız kesme ifadeleri yok."

"if deyimlerinin genellikle daha derli toplu olduğu doğrudur. Ancak bir switch deyimi bazen daha okunaklıdır."

"Karşılaştırmak:"

Anahtarlı örnek eşdeğer kod
public String getName(int i)
{
 switch(i)
 {
  case 1:
   return "one";
  case 2:
   return "two";
  case 3:
   return "three";
  default:
   return "many";
}
public String getName(int i)
{
 if (i == 1)
  return "one";

 if (i == 2)
  return "two";

 if (i == 3)
  return "three";

return "many"
}

"Daha okunaklı olduğunu söyleyemem."

"Tamam, peki ya bu örnek?"

Anahtarlı örnek eşdeğer kod
public String getName(int i)
{
 switch(i)
 {
  case 1:
  case 2:
   return "one or two";
  case 3:
  case 4:
  case 5:
   return "three to five";
  default:
   return "many";
}
public String getName(int i)
{
 if (i == 1 || i == 2)
  return "one or two";

 if (i == 3 || i == 4 || i == 5)
  return "three to five";

return "many"
}

"Bilaabo, örneğiniz pek doğru görünmüyor. Yani, dönüş kullanırsam break ifadesini atlayabilir miyim?"

"Doğru. Bir dönüş ifadesi, yöntemden hemen çıkar."

"Görünüşe göre if ifadeleri her zaman daha derli toplu. Ancak bu kez switch ifadesi daha okunaklı çıktı."

"Uf, sonunda."

"Bir şey daha. Sonuna varsayılan yazmak zorunda değilsiniz. Yazmazsanız, o zaman etiketlerden hiçbiri eşleşmezse hiçbir şey olmaz."

"Ah, kesinlikle. If-else gibi, ama okunabilir... çok daha okunabilir!"

"Harika. Dersimi beğendiğine sevindim."

"Ah, neredeyse unutuyordum. Başlangıçta, switch deyimlerinde yalnızca ilkel türleri ve numaralandırmaları kullanabiliyordunuz. Ama şimdi Dizeler için destek eklediler."

"Bunu yazdığımı mı söylüyorsun?"

Örnek
public int getNumber(String number)
{
 switch(number)
 {
  case "one":
   return 1;
  case "two":
   return 2;
  case "three":
   return 3;
  default:
   return -1;
 }
}

"Evet. Uygun, değil mi?"

"Evet. Anahtar ifadeleri harika!"