في لغة JavaScript، تُستخدم تعليمة switch لتنفيذ كتل مختلفة من التعليمات البرمجية بناءً على قيمة تعبير واحد. تُعتبر switch بديلًا أكثر تنظيمًا ووضوحًا لسلسلة من تعليمات if...else if...else، خاصةً عندما يكون لديك العديد من الشروط التي تعتمد على نفس المتغير.

بنية تعليمة switch:

JavaScript
switch (expression) {
case value1:
// كود يُنفّذ إذا كان expression === value1
break;
case value2:
// كود يُنفّذ إذا كان expression === value2
break;
case value3:
// كود يُنفّذ إذا كان expression === value3
break;
...
default:
// كود يُنفّذ إذا لم يتطابق expression مع أي من القيم السابقة
}
  • expression: هو التعبير الذي سيتم تقييمه ومقارنته مع قيم الحالات case.
  • case valueN: تُحدد قيمة معينة للمقارنة مع expression. يجب أن تكون valueN قيمة ثابتة أو تعبيرًا يُقيّم إلى قيمة ثابتة.
  • break: تُنهي تنفيذ تعليمة switch وتنتقل إلى التعليمات البرمجية التي تليها. من الضروري استخدام break في نهاية كل حالة case لمنع "السقوط" (fall-through) إلى الحالات التالية.
  • default: حالة اختيارية تُنفّذ إذا لم يتطابق expression مع أي من قيم case السابقة.

كيف تعمل تعليمة switch؟

  1. يتم تقييم expression مرة واحدة.
  2. يتم مقارنة قيمة expression بشكل صارم (===) مع قيمة كل case بالتسلسل.
  3. إذا تطابقت قيمة expression مع قيمة case، يتم تنفيذ الكود الموجود داخل هذه الحالة.
  4. إذا تم الوصول إلى break، يتوقف تنفيذ switch وينتقل التحكم إلى التعليمات البرمجية التي تليها.
  5. إذا لم يتطابق expression مع أي من قيم case، يتم تنفيذ الكود الموجود داخل حالة default (إذا كانت موجودة).
  6. إذا لم يتطابق expression مع أي من قيم case ولم تكن هناك حالة default، لا يتم تنفيذ أي كود داخل switch.

مثال:

JavaScript
let day = 3;
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); // سيُطبع "الأربعاء"

مثال مع "السقوط" (fall-through):

إذا لم يتم استخدام break في نهاية حالة case، سيستمر التنفيذ في الحالات التالية حتى الوصول إلى break أو نهاية switch. يُسمى هذا السلوك "السقوط".

JavaScript
let x = 1;

switch (x) {
case 1:
console.log("الحالة 1"); // سيُطبع
case 2:
console.log("الحالة 2"); // سيُطبع
case 3:
console.log("الحالة 3"); // سيُطبع
break;
default:
console.log("الحالة الافتراضية");
}

في هذا المثال، سيتم طباعة "الحالة 1" و "الحالة 2" و "الحالة 3" لأن عدم وجود break بعد الحالة 1 و 2 تسبب في "السقوط" إلى الحالات التالية.

متى نستخدم switch؟

  • عندما يكون لديك متغير واحد تريد مقارنته مع قيم متعددة.
  • عندما تريد بديلًا أكثر وضوحًا وتنظيمًا لسلسلة if...else if...else طويلة.

متى لا نستخدم switch؟

  • عندما تكون الشروط معقدة ولا تعتمد على مقارنة بسيطة لقيمة واحدة. في هذه الحالة، تكون if...else if...else أكثر ملاءمة.
  • عندما تحتاج إلى استخدام معاملات مقارنة أخرى غير المساواة الصارمة (===).

باختصار، تُعتبر switch أداة قوية لتنفيذ كتل مختلفة من التعليمات البرمجية بناءً على قيمة تعبير واحد، وتُساعد على كتابة كود أكثر تنظيمًا وقراءة.