JavaScript үндэс / Switch хуваарилагч

Switch хуваарилагч

Нэг хувьсагчийг олон тогтмол утгатай харьцуулах шаардлага байнга гардаг. Жишээлбэл гаригийн нэрийг шалгаж ажлын өдөр эсэхийг тодорхойлох, сарын дугаараар улирлыг тодорхойлох гэх мэт. Ийм тохиолдолд if/else if гинж урт болж уншиход хүнд болдог — switch нь үүний гоёмсог шийдэл юм.

switch бүтэц

javascript
let day = "Мягмар";

switch (day) {
  case "Даваа":
    console.log("Долоо хоногийн эхний өдөр.");
    break;
  case "Мягмар":
    console.log("Долоо хоногийн хоёр дахь өдөр.");
    break;
  case "Лхагва":
    console.log("Долоо хоногийн гол өдөр.");
    break;
  default:
    console.log("Бусад өдөр.");
}
// Долоо хоногийн хоёр дахь өдөр.

switch нь day-ийн утгыг бүх case-тэй дарааллаар харьцуулна. Таарсан case олдвол түүний доорх кодыг ажиллуулна. break нь switch-ээс гарахад хэрэглэнэ. default нь ямар ч case таарахгүй үед ажилладаг — if/else-ийн else-тэй адил.

break мартвал яах вэ?

break бичихээ мартвал JavaScript нь таарсан case-ийн дараагийн бүх case-ийг ч ажиллуулдаг. Үүнийг fall-through гэдэг.

javascript
let grade = "B";

switch (grade) {
  case "A":
    console.log("Онц!");
  case "B":
    console.log("Сайн."); // Энэ ажиллана
  case "C":
    console.log("Дунд."); // Энэ ч ажиллана — break байхгүй учраас!
    break;
  default:
    console.log("Тэнцээгүй.");
}
// Сайн.
// Дунд.

Санаатайгаар fall-through ашигладаг цорын ганц тохиолдол бол нэг үр дүнтэй олон case нэгтгэх үед:

javascript
let month = 7;

switch (month) {
  case 12:
  case 1:
  case 2:
    console.log("Өвөл");
    break;
  case 3:
  case 4:
  case 5:
    console.log("Хавар");
    break;
  case 6:
  case 7:
  case 8:
    console.log("Зун");
    break;
  default:
    console.log("Намар");
}
// Зун

switch vs if/else — хэзээ алийг ашиглах вэ?

javascript
// if/else — харьцуулалт нарийн нөхцөлтэй үед тохиромжтой
let score = 78;
if (score >= 90) {
  console.log("A");
} else if (score >= 80) {
  console.log("B");
} else if (score >= 70) {
  console.log("C");
}

// switch — нэг утгыг тогтмол утгуудтай харьцуулах үед тохиромжтой
let language = "javascript";
switch (language) {
  case "javascript":
    console.log("Шар өнгө — JS");
    break;
  case "typescript":
    console.log("Ягаан өнгө — TS");
    break;
  case "python":
    console.log("Шар өнгө — Python");
    break;
  default:
    console.log("Тодорхойгүй хэл");
}

Ерөнхий дүрэм: нэг хувьсагчийг тогтмол утгуудтай харьцуулахад switch, нөхцөл нь муж (range) эсвэл нарийн логиктой бол if/else ашигла.

Жишээ: XP шагналын систем

javascript
const badge = "gold";
let bonusXP;

switch (badge) {
  case "platinum":
    bonusXP = 500;
    break;
  case "gold":
    bonusXP = 200;
    break;
  case "silver":
    bonusXP = 100;
    break;
  case "bronze":
    bonusXP = 50;
    break;
  default:
    bonusXP = 10;
}

console.log(`Шагналын XP: ${bonusXP}`);
// Шагналын XP: 200

Дараагийн хичээлд:

for давталтыг судлана — нэг кодыг олон удаа давтан ажиллуулах хамгийн нийтлэг хэрэгслийг үзнэ.