Switch
ifodasi bir nechta if
tekshiruvlarini almashtirishi mumkin.
Bu qiymatni bir nechta variant bilan taqqoslashning yanada tavsiflovchi usulini beradi.
Sintaksis
Switch
bir yoki bir nechta case
bloklariga ega va ixtiyoriy sukut bo’yicha.
Bu shunday ko’rinishga ega:
switch(x) {
case 'value1': // if (x === 'value1')
...
[break]
case 'value2': // if (x === 'value2')
...
[break]
default:
...
[break]
}
x
qiymati birinchicase
dan qat’iy tenglik tekshiriladi (ya’nivalue1
) keyin ikkinchisiga (value2
) va boshqalar.- Agar tenglik topilsa,
switch
mos keladigancase
dan boshlab, eng yaqinbreak
ga qadar (yokiswitch
tugaguniga qadar) kodni bajarishni boshlaydi. - Agar biron bir holat mos kelmasa, u holda
default
kodi bajariladi (agar mavjud bo’lsa).
Misol
Switch
misoli (bajarilgan kod ajratilgan):
let a = 2 + 2;
switch (a) {
case 3:
alert( 'Juda kichik' );
break;
case 4:
alert( 'Aynan!' );
break;
case 5:
alert( 'Juda katta' );
break;
default:
alert( "Men bunday qiymatlarni bilmayman" );
}
Bu erda switch
3
bo’lgan birinchi case
variantidan a
ni taqqoslashni boshlaydi. Taqqoslash muvaffaqiyatsiz tugadi.
Keyin 4
. Bu to’g’ri, shuning uchun ijro case 4
dan eng yaqin break
ga qadar boshlanadi.
Agar break
bo’lmasa, ijro keyingi case
ga hech qanday tekshiruvsiz davom etadi.
break
siz misol:
let a = 2 + 2;
switch (a) {
case 3:
alert( 'Juda kichik' );
case 4:
alert( 'Aynan!' );
case 5:
alert( 'Juda katta' );
default:
alert( "Men bunday qiymatlarni bilmayman" );
}
Yuqoridagi misolda biz uchta alert
ning ketma-ket bajarilishini ko’ramiz:
alert("Aynan!");
alert("Juda katta");
alert("Men bunday qiymatlarni bilmayman");
switch/case
argumenti bo’lishi mumkinIkkalaswitch
vacase
o’zboshimchalik bilan ifodalashga imkon beradi.
Masalan:
let a = "1";
let b = 0;
switch (+a) {
case b + 1:
alert("bu ishlaydi, chunki +a bu 1, aynan b + 1 ga teng");
break;
default:
alert("bu ishlamaydi");
}
Bu yerda +a
1
ni beradi, bu b
bilan case
da taqqoslanadi va tegishli kod bajariladi.
“Case” ning guruhlanishi
Bir xil kodga ega bo’lgan case
ning bir nechta variantlarini guruhlash mumkin.
Masalan, agar biz bir xil kodni case 3
va case 5
uchun ishlashini istasak:
let a = 3;
switch (a) {
case 4:
alert("To'g'ri!");
break;
case 3: // (*) ikkita case guruhlashtirildi
case 5:
alert("Noto'g'ri!");
alert("Nega siz matematikadan dars olmagansiz?");
break;
default:
alert('Natija g'alati. Haqiqatan ham.');
}
Endi 3
va 5
holat bir xil xabarni ko’rsatadi.
Holatning “guruhlash” qobiliyati – bu switch/case
ning break
siz ishlashining yon ta’siri. Bu erda 3
holatning bajarilishi (*)
satridan boshlanadi va 5
holatidan o’tadi, chunki break
yo’q.
Turi muhim
Shuni ta’kidlaylikki, tenglikni tekshirish har doim qat’iydir. Qiymatlar mos kelish uchun bir xil turda bo’lishi kerak.
Masalan, quyidagi kodni ko’rib chiqaylik:
let arg = prompt("Qiymatni kiriting?");
switch (arg) {
case '0':
case '1':
alert( 'Bir yoki nol' );
break;
case '2':
alert( 'Ikki' );
break;
case 3:
alert( 'Hech qachon bajarilmaydi!' );
break;
default:
alert( 'Noma'lum qiymat' );
}
0
,1
uchun birinchialert
ishlaydi.2
uchun ikkinchialert
ishlaydi.- Ammo
3
uchunprompt
natijasi"3"
matnidir, bu3
raqamiga qat’iy teng emas===
. Shunday qilibcase 3
da o’lik kod bor!Default
holat bajariladi.
Izohlar
<code>
yorlig'ini ishlating, bir nechta satrlar uchun - ularni<pre>
yorlig'i bilan o'rab qo'ying, 10 satrdan ortiq bo'lsa - sandbox (plnkr, jsbin, codepen…)