جاري التحميل...

أمر switch

يتألق if / else حين يكون السؤال نعم/لا أو نطاقاً. أحياناً السؤال مختلف: أي قيمة ثابتة من عدة قيم؟ رمز يوم 1…7، حالة "ok" / "warn" / "err"، مفتاح قائمة. لهذا الشكل switch هو الأداة الأنظف. أنت تعرف التفريع؛ هنا تطابق قيمة واحدة مع عدة case موسومة.

ماذا يفعل switch؟

ينظر switch إلى تعبير واحد بين قوسين. يقارن تلك القيمة بتسمية كل case. عند التطابق تُنفَّذ جمل ذلك المسار. break يغادر الـ switch فلا تُنفَّذ الحالات التالية. default هو المسار الاحتياطي إن لم تتطابق أي حالة.

القطع بلمحة

📊 قطع switch اليومية

الكلمة قراءة يومية استخدام شائع
switch انظر إلى هذه القيمة… افتح الاختيار
case إن ساوت هذه التسمية… خيار ثابت واحد
break قف هنا؛ اخرج من switch أنهِ بعد تطابق
default إن لم يتطابق شيء… مسار احتياطي

المطابقة بأسلوب مساواة صارمة (فكرة ===). لن تطابق حالة رقمية سلسلة أرقام. أبقِ القيمة والتسميات بنفس الشكل.

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. فُحصت الحالتان 1 و2 وتُركتا. بعد break ينتهي الـ switch — لا يعمل default.

بلا break يكمل JavaScript إلى أجسام الحالات التالية. هذا يُسمى fall-through. المبتدئ يريد تقريباً دائماً 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 يشغّل الحالات اللاحقة أيضاً

day يساوي 2. يبدأ التطابق عند case 2، يطبع Tue، ثم يدخل case 3 ويطبع Wed قبل break. أردت تسمية واحدة؛ حصلت على اثنتين. ضع 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. لا حالة تطابق، فيعمل default وترى other. استخدم default حين تحتاج رسالة آمنة لكل قيمة غير متوقعة. احذفه فقط إن كان الصمت مقبولاً.

حالات نصية

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");
}

الحالات قد تكون نصوصاً أيضاً

status هو "warn" فترى yellow. الحالات النصية شائعة لرموز قصيرة من نموذج أو API. النطاقات مثل «درجة من 60 إلى 90» تبقى لـ 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);

سمِّ نتيجة المطابقة

عيّن label داخل كل حالة (وفي default) ثم استخدمه مرة لاحقاً. هنا يصبح 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. ابنِ switch على let day = 1 يسجّل "Mon" للحالة 1.
  2. أضف حالتين لـ 2 و3 مع break بعد كل منهما.
  3. ضع day على 9 وتأكد أن default يسجّل "other".
  4. بدّل على نص status بالقيم "ok" و"warn" و"err".
  5. احذف break مؤقتاً وراقب fall-through في الكونسول.
  6. في عرض HTML غيّر day فقط، حدّث، واقرأ نص day= الجديد.

أخطاء شائعة

  • نسيان break بعد الحالة (تعمل الحالات التالية أيضاً)
  • استخدام switch لنطاق مفتوح (score >= 60) — فضّل if / else if
  • خلط الأنواع فلا يطابق رقم حالة نصية أبداً
  • حذف default حين القيم المجهولة ما زالت تحتاج رسالة
  • استبدال كل if بـ switch حين الفحص ليس قائمة تسميات ثابتة

خلاصة

  • switch يطابق قيمة واحدة مع عدة تسميات case
  • break يوقف الـ switch بعد التطابق
  • default يعمل حين لا تطابق
  • الأنسب للقيم المنفصلة؛ النطاقات تبقى مع if / else if
  • خزّن التسمية إن احتجت النتيجة لاحقاً؛ اعرضها على الصفحة عند الحاجة
  • التالي: حلقة for — تكرار العمل عدداً محدداً من المرات

🧠 اختبر معرفتك

جاهز للبدء

اختبر معرفتك

تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع

❓
8
الأسئلة
🎯
70%
للنجاح
♾️
∞
الوقت
🔄
∞
المحاولات

📝 التعليمات

  • اقرأ كل سؤال بعناية
  • اختر أفضل إجابة لكل سؤال
  • يمكنك إعادة الاختبار عدة مرات كما تريد
  • سيتم عرض تقدمك في الأعلى