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)