Switch Case (اختيار من عدة حالات)
أحيانًا يكون عندنا متغير واحد وله عدة قيم محتملة (مثل رقم يوم، نوع مستخدم، لون، خيار من قائمة). كتابة if/else كثيرة تصبح مزعجة وغير مرتبة. هنا يأتي دور switch.
متى نستخدم switch؟ ومتى نستخدم if؟
استخدم switch ✅
- عندك متغير واحد وتريد فحص قيم كثيرة
- القيم واضحة مثل: 1، 2، 3 أو "admin" و "user"
- تبغى كود مرتب وسهل القراءة
استخدم if ✅
- عندك شروط معقدة (أكبر/أصغر، شروط متعددة)
- تحتاج && و || كثير
- الشرط ليس مجرد مساواة لقيمة واحدة
شكل switch الأساسي
هذا شكل switch:
switch (value) {
case "A":
// نفّذ هذا إذا كانت value = "A"
break;
case "B":
// نفّذ هذا إذا كانت value = "B"
break;
default:
// إذا ولا حالة طابقت
}
مهم جدًا
- case = حالة ممكنة
- break = يوقف التنفيذ عند أول حالة تطابق
- default = مثل else (الخيار الأخير)
مثال عملي: رقم اليوم إلى اسم اليوم
تخيل عندنا رقم من 1 إلى 7 يمثل اليوم، ونريد تحويله لاسم اليوم.
let day = 5;
let dayName = "";
switch (day) {
case 1:
dayName = "الأحد";
break;
case 2:
dayName = "الإثنين";
break;
case 3:
dayName = "الثلاثاء";
break;
case 4:
dayName = "الأربعاء";
break;
case 5:
dayName = "الخميس";
break;
case 6:
dayName = "الجمعة";
break;
case 7:
dayName = "السبت";
break;
default:
dayName = "رقم يوم غير صحيح";
}
console.log(dayName);
ليش هذا المثال مفيد؟
لأنك بدل ما تكتب if/else كثيرة، جمعت كل الحالات في مكان واحد واضح.
مثال واقعي: صلاحيات المستخدم حسب النوع
تخيل عندك نوع مستخدم: admin أو editor أو user. تريد عرض رسالة مختلفة لكل نوع.
let role = "editor";
switch (role) {
case "admin":
console.log("أهلاً مدير النظام 👑");
break;
case "editor":
console.log("أهلاً بالمحرر ✍️");
break;
case "user":
console.log("أهلاً بك 👋");
break;
default:
console.log("نوع المستخدم غير معروف");
}
لاحظ: switch هنا مناسب جدًا لأننا نقارن نفس المتغير (role) مع قيم ثابتة.
حالة خاصة: دمج أكثر من case لنفس النتيجة
أحيانًا تريد أكثر من قيمة تؤدي لنفس النتيجة. هنا نكتب case فوق بعض بدون break:
let grade = "B";
switch (grade) {
case "A":
case "B":
console.log("مستواك ممتاز 👏");
break;
case "C":
console.log("مستواك جيد");
break;
default:
console.log("حاول مرة أخرى");
}
إيش صار هنا؟
إذا grade = A أو B… البرنامج يطبع نفس الرسالة ثم يتوقف عند break.
أخطاء شائعة في switch (انتبه!)
- نسيان break مما يجعل البرنامج يكمل حالات أخرى (Fall-through)
- كتابة قيم case بنوع مختلف (مثل رقم بدل نص أو العكس)
- نسيان default (مهم جدًا لمعالجة الحالات غير المتوقعة)
تذكير سريع:
switch يستخدم مقارنة “صارمة” في حالات كثيرة، لذلك انتبه لنوع البيانات (Number vs String).
ماذا بعد هذا الدرس؟
الدرس القادم: الحلقات (Loops) — for / while
سنبدأ نفهم كيف نكرر الأوامر بدل ما نكتب نفس الكود 50 مرة.