25 август 2025

"switch" ifodasi

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 birinchi case dan qat’iy tenglik tekshiriladi (ya’ni value1) keyin ikkinchisiga (value2) va boshqalar.
  • Agar tenglik topilsa, switch mos keladigan case dan boshlab, eng yaqin break ga qadar (yoki switch 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");
Har qanday ifoda switch/caseargumenti bo’lishi mumkin

Ikkalaswitchvacase 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' );
}
  1. 0, 1 uchun birinchi alert ishlaydi.
  2. 2 uchun ikkinchi alert ishlaydi.
  3. Ammo 3 uchun prompt natijasi "3" matnidir, bu 3 raqamiga qat’iy teng emas ===. Shunday qilib case 3 da o’lik kod bor! Default holat bajariladi.

Vazifalar

Kodni quyidagi switch ga mos keladigan if..else yordamida yozing:

switch (browser) {
  case 'Edge':
    alert( "Sizda Edge bor!" );
    break;

  case 'Chrome':
  case 'Firefox':
  case 'Safari':
  case 'Opera':
    alert( 'Yaxshi biz ushbu brauzerlarni ham qo'llab-quvvatlaymiz' );
    break;

  default:
    alert( "Ushbu sahifa yaxshi ko'rinadi deb umid qilamiz!" );
}

switch funktsiyasiga to’liq mos kelish uchun if qat’iy taqqoslashni '===' ishlatishi kerak.

Berilgan satrlar uchun oddiy '==' ham ishlaydi.

if(browser == 'Edge') {
  alert("Sizda Edge bor!");
} else if (browser == 'Chrome'
 || browser == 'Firefox'
 || browser == 'Safari'
 || browser == 'Opera') {
  alert( 'Yaxshi biz ushbu brauzerlarni ham qo'llab-quvvatlaymiz' );
} else {
  alert( "Ushbu sahifa yaxshi ko'rinadi deb umid qilamiz!" );
}

Iltimos, e’tibor bering: browser == 'Chrome' || browser == 'Firefox' … yaxshi o’qilish uchun bir nechta satrlarga bo’lingan.

Ammo switch konstruktsiyasi tozaroq va tavsiflovchiroq.

Bitta switch ifodasu yordamida quyidagi kodni qayta yozing:

let a = +prompt("a?", "");

if (a == 0) {
  alert(0);
}
if (a == 1) {
  alert(1);
}

if (a == 2 || a == 3) {
  alert("2,3");
}

Dastlabki ikkita tekshiruv ikkita case ga aylanadi. Uchinchi tekshirish ikki holatga bo’linadi:

let a = +prompt('a?', '');

switch (a) {
  case 0:
    alert( 0 );
    break;

  case 1:
    alert( 1 );
    break;

  case 2:
  case 3:
    alert( '2,3' );
    break;
}

Iltimos, diqqat qiling: pastki qismida break shart emas. Ammo biz buni kodni kelajakka ishonchli qilish uchun qo’ydik.

Kelajakda yana bitta case, masalan case 4 ni qo’shishni xohlashimiz mumkin. Agar bundan oldin tanaffus qo’shishni unutib qo’ysak, case 3 oxirida xato bo’ladi. Demak, bu o’z-o’zini sug’urtalashning bir turi.

O'quv qo'llanma xaritasi

Izohlar

izoh berishdan oldin buni o'qing…
  • Agar sizda nimani yaxshilash kerakligi haqida takliflaringiz bo'lsa - iltimos, GitHub muammosini yuboring yoki izoh berish o'rniga so'rov yuboring.
  • Agar siz maqolada biror narsani tushunolmasangiz - iltimos, batafsilroq ma'lumot bering.
  • Bir nechta so'z so'zlarini kiritish uchun <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…)