در حال بارگذاری...

دستور switch

if / else وقتی سؤال بله/خیر یا بازه است عالی کار می‌کند. گاهی سؤال جور دیگری است: از بین چند مقدار ثابت، کدام است؟ کد روز 1 تا 7، وضعیت "ok" / "warn" / "err"، کلید منو. برای این شکل، switch ابزار تمیز است. شاخه‌زنی را بلدید؛ اینجا یک مقدار را با چند case برچسب‌دار جور می‌کنید.

switch چه می‌کند؟

switch یک عبارت داخل پرانتز را می‌بیند. آن مقدار را با برچسب هر case مقایسه می‌کند. وقتی برچسب جور شد، دستورهای زیر همان case اجرا می‌شوند. break از switch بیرون می‌آید تا caseهای بعدی اجرا نشوند. default وقتی هیچ case جور نشد مسیر پشتیبان است.

نگاه سریع به قطعه‌ها

📊 قطعه‌های روزمرهٔ switch

کلیدواژه خواندن روزمره کاربرد معمول
switch این مقدار را ببین… باز کردن انتخاب
case اگر با این برچسب برابر بود… یک گزینهٔ ثابت
break همین‌جا بایست؛ از switch بیرون برو پایان بعد از تطبیق
default اگر هیچ‌کدام جور نشد… مسیر پشتیبان

تطبیق به سبک برابری سخت است (همان ایدهٔ ===). case عددی با رشتهٔ رقم‌ها جور نمی‌شود. مقدار و برچسب‌ها را هم‌شکل نگه دارید.

switch ساده

javascript
let day = 3;
switch (day) {
case 1:
console.log("Mon");
break;
case 2:
console.log("Tue");
break;
case 3:
console.log("Wed");
break;
default:
console.log("other");
}

یک مقدار، چند مسیر برچسب‌دار

اینجا day برابر 3 است؛ پس مسیر case 3 اجرا می‌شود و کنسول Wed را چاپ می‌کند. caseهای 1 و 2 چک شدند و رد شدند. بعد از break کار switch تمام است — default اجرا نمی‌شود.

بدون break، JavaScript وارد بدنۀ caseهای بعدی هم می‌شود. به این می‌گویند fall-through. برای مبتدی تقریباً همیشه بعد از هر case تمام‌شده یک break می‌خواهید.

چرا break مهم است

javascript
let day = 2;
switch (day) {
case 1:
console.log("Mon");
case 2:
console.log("Tue");
case 3:
console.log("Wed");
break;
default:
console.log("other");
}

بدون break، caseهای بعدی هم اجرا می‌شوند

day برابر 2 است. تطبیق از case 2 شروع می‌شود، Tue چاپ می‌شود، بعد وارد case 3 می‌شود و قبل از break عبارت Wed هم چاپ می‌شود. یک برچسب می‌خواستید؛ دو تا گرفتید. زیر هر case تمام‌شده break بگذارید مگر عمداً کد مشترک می‌خواهید.

default وقتی هیچ‌کدام جور نشد

javascript
let day = 9;
switch (day) {
case 1:
console.log("Mon");
break;
case 2:
console.log("Tue");
break;
default:
console.log("other");
}

default یعنی «هیچ‌کدام از این‌ها»

day برابر 9 است. هیچ case جور نیست؛ پس default اجرا می‌شود و other را می‌بینید. وقتی مقدار غیرمنتظره هم باید پیام امن داشته باشد از default استفاده کنید. فقط وقتی سکوت قابل قبول است می‌توانید حذفش کنید.

caseهای رشته‌ای

javascript
let status = "warn";
switch (status) {
case "ok":
console.log("green");
break;
case "warn":
console.log("yellow");
break;
case "err":
console.log("red");
break;
default:
console.log("unknown");
}

case می‌تواند رشته هم باشد

status برابر "warn" است؛ پس yellow را می‌بینید. case رشته‌ای برای کدهای کوتاه فرم یا API رایج است. بازه‌هایی مثل «نمره از ۶۰ تا ۹۰» هنوز مال if / else if است — switch برچسب‌های گسسته می‌خواهد.

ذخیرهٔ برچسب انتخاب‌شده

javascript
let day = 1;
let label;
switch (day) {
case 1:
label = "Mon";
break;
case 2:
label = "Tue";
break;
default:
label = "other";
}
console.log(label);

نتیجهٔ تطبیق را نام‌گذاری کنید

داخل هر case (و در default) مقدار label را بگذارید، بعد یک‌بار استفاده کنید. اینجا label می‌شود "Mon". همان الگویی که با if / else دیدید — اول انتخاب، بعد استفاده.

مسیر انتخاب‌شده را روی صفحه نشان دهید

با switch پیام کوتاه بسازید، بعد روی صفحه بنویسید.

انتخاب صفحه با switch

html
<!DOCTYPE html>
<html>
<head>
<title>Switch — page choice</title>
</head>
<body>
<p id="out">…</p>
<script>
let day = 3;
let msg;
switch (day) {
case 1:
msg = "Mon";
break;
case 2:
msg = "Tue";
break;
case 3:
msg = "Wed";
break;
default:
msg = "other";
}
let box = document.getElementById("out");
box.textContent = "day=" + msg;
</script>
</body>
</html>

day برابر 3 است؛ صفحه day=Wed را نشان می‌دهد. day را 9 کنید، رفرش کنید؛ باید day=other ببینید. جلسهٔ بعد (for) کار را چندبار تکرار می‌کند؛ برای «کدام برچسب ثابت؟» همان switch ابزار می‌ماند.

خودتان امتحان کنید

  1. با let day = 1 یک switch بسازید که برای case 1 عبارت "Mon" را لاگ کند.
  2. برای 2 و 3 هم case بگذارید و بعد از هر کدام break بزنید.
  3. day را 9 کنید و ببینید default عبارت "other" را لاگ می‌کند.
  4. روی رشتهٔ status با "ok"، "warn"، "err" سوئیچ کنید.
  5. موقتاً یک break را بردارید و fall-through را در کنسول ببینید.
  6. در دموی HTML فقط day را عوض کنید، رفرش کنید، متن تازهٔ day= را بخوانید.

اشتباه‌های رایج

  • فراموش کردن break بعد از case (caseهای بعدی هم اجرا می‌شوند)
  • استفاده از switch برای بازهٔ باز (score >= 60) — همان if / else if بهتر است
  • قاطی کردن نوع‌ها طوری که عدد هرگز با case رشته جور نشود
  • حذف default وقتی مقدار ناشناخته هنوز پیام می‌خواهد
  • جایگزینی هر if با switch وقتی چک، فهرست برچسب ثابت نیست

خلاصه

  • switch یک مقدار را با چند برچسب case جور می‌کند
  • break بعد از تطبیق از switch بیرون می‌آید
  • default وقتی هیچ‌کدام جور نشد اجرا می‌شود
  • برای مقادیر گسسته مناسب است؛ بازه با if / else if بماند
  • اگر بعداً نتیجه لازم است در متغیر ذخیره کنید؛ روی صفحه هم می‌توانید نشان دهید
  • بعدی: حلقه for — تکرار کار به تعداد مشخص

🧠 دانش خود را بیازمایید

آماده شروع

دانش خود را بیازمایید

خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کرده‌اید

❓
8
سوالات
🎯
70%
برای قبولی
♾️
∞
زمان
🔄
∞
تلاش‌ها

📝 دستورالعمل‌ها

  • هر سوال را با دقت بخوانید
  • بهترین پاسخ را برای هر سوال انتخاب کنید
  • می‌توانید آزمون را هر چند بار که می‌خواهید تکرار کنید
  • پیشرفت شما در بالا نمایش داده می‌شود