Switch хуваарилагч
Нэг хувьсагчийг олон тогтмол утгатай харьцуулах шаардлага байнга гардаг. Жишээлбэл гаригийн нэрийг шалгаж ажлын өдөр эсэхийг тодорхойлох, сарын дугаараар улирлыг тодорхойлох гэх мэт. Ийм тохиолдолд if/else if гинж урт болж уншиход хүнд болдог — switch нь үүний гоёмсог шийдэл юм.
switch бүтэц
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 гэдэг.
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 нэгтгэх үед:
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 — хэзээ алийг ашиглах вэ?
// 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 шагналын систем
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 давталтыг судлана — нэг кодыг олон удаа давтан ажиллуулах хамгийн нийтлэг хэрэгслийг үзнэ.