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]
}
xqiymati birinchicasedan qat’iy tenglik tekshiriladi (ya’nivalue1) keyin ikkinchisiga (value2) va boshqalar.- Agar tenglik topilsa,
switchmos keladigancasedan boshlab, eng yaqinbreakga qadar (yokiswitchtugaguniga qadar) kodni bajarishni boshlaydi. - Agar biron bir holat mos kelmasa, u holda
defaultkodi 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/caseargumenti bo’lishi mumkinIkkalaswitchvacase 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 breaksiz 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,1uchun birinchialertishlaydi.2uchun ikkinchialertishlaydi.- Ammo
3uchunpromptnatijasi"3"matnidir, bu3raqamiga qat’iy teng emas===. Shunday qilibcase 3da o’lik kod bor!Defaultholat 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…)