Türkçe olarak buradaki anlamıyla koşullu ifade demektir.
Switch cümleleri if cümleleri haline de getirilebilirler.
Daha açıklayıcı ve değerleri birçok farklı şekilde karşılaştırabilir.
Yazım
Switch bir veya birden fazla case bloğu içermelidir. İsteğe bağlı olarak default bloğu kullanılabilir. Yazımı aşağıdaki gibidir.
switch(x) {
case 'deger1': // if (x === 'deger1')
...
[break]
case 'deger2': // if (x === 'deger2')
...
[break]
default:
...
[break]
}
-
xdeğerisıkı eşitlikile kontrol edildi. (deger1) sonra dadeger2 -
Eğer eşitlik bulunursa en yakın
breakolan yere kadar çalışmaya devam eder. Eğerbreakyoksa döngüyü kıramayacağından dolayıswitchsonuna kadar çalışır. -
Eğer hiçbir eşitlik sağlanamazsa
defaultiçinde olan kod çalışır.
Örnek
Aşağıda bulunan örnekte çalışacak case bloğu vurgulanmıştır.
let a = 2 + 2;
switch (a) {
case 3:
alert( 'Çok kısa' );
break;
case 4:
alert( 'Kesinlikle!' );
break;
case 5:
alert( 'Çok büyük' );
break;
default:
alert( "Böyle bir değeri bilmiyorum." );
}
Başlangıçta switch cümlesi a değişkenini ilk önce 3 case’i ile karşılaştırır. Bu karşılaştırma yanlış olduğundan ikinciye geçer.
4 ise eşitliği sağlar 4den itibaren en yakın breake kadar olan bölüm çalışır.
Eğer break konulmazsa sonraki case de hiçbir kontrol olmadan çalışır
break olmadan yazılmış hali:
let a = 2 + 2;
switch (a) {
case 3:
alert( 'Çok kısa' );
case 4:
alert( 'Kesinlikle!' );
case 5:
alert( 'Çok büyük' );
default:
alert( "Böyle bir değeri bilmiyorum." );
}
Bu döngü çalıştırıldığında ekranda sıralı şekilde uyarılar göreceksiniz.
alert( 'Kesinlikle!' );
alert( 'Çok büyük' );
alert( "Böyle bir değeri bilmiyorum." );
switch/case olabilir.Örneğin:
let a = "1";
let b = 0;
switch (+a) {
case b + 1:
alert("Çalışır çünkü a+1 = b+1");
break;
default:
alert("Burası çalışmaz");
}
+a 1 değeri döndürür. case işleminde b+1 ile karşılaştırıldığında sonuç doğru olduğundan içerideki alert çalışır.
“case”'leri gruplama
Gövdesinde aynı kodu çalıştıran birden fazla case gruplanabilir.
Örneğin, diyelim ki case 3 ve case 5 için aynı kodu çalıştırmak istedik:
let a = 2 + 2;
switch (a) {
case 4:
alert('Doğru!');
break;
case 3: // (*) iki "case" gruplandı
case 5:
alert('Yanlış!');
alert("Neden matematik dersi almıyorsun?");
break;
default:
alert('Sonuç garip. Gerçekten!');
}
3 ve 5 aynı mesajı gösterecek.
Aslında “gruplama” switch/case’in break olmadan çalıştırılmış halidir.
Yan etki de denebilir. case 3 (*)'dan başlar ve arada break olmadığından case 5 ile devam eder.
Tipler önemlidir
Başta da söylenildiği gibi değişken eşitlikleri her zaman sıkı olarak kontrol edilir. Bundan dolayı değerler karşılaştırılırken aynı tipte olmasına dikkat edilmesi gerekir.
Örneğin, aşağıdaki kodu göz önüne alırsanız:
let arg = prompt("Bir değer giriniz?")
switch (arg) {
case '0':
case '1':
alert( 'Bir veya 2' );
break;
case '2':
alert( '2' );
break;
case 3:
alert( 'hiçbir zaman çalışmaz!' );
break;
default:
alert( 'Bilinmeyen bir değer' )
}
0ve1değerleri için ilkalertçalışır.2değeri için ikincialertçalışır.prompther zaman karakter dizisi döndüreceğinden dolayı kontrol eğer3şeklinde yapılsaydı bu durumda ekrana mesaj çıkacaktı. Fakat kontrol sayı olan 3 ile yapıldığından dolayı bu ölü koddur ve hiçbir zaman çalışmaz. Bunun yerinedefaultkodu çalışacaktır.
Yorumlar
<code>kullanınız, birkaç satır eklemek için ise<pre>kullanın. Eğer 10 satırdan fazla kod ekleyecekseniz plnkr kullanabilirsiniz)