| العنصر | الوظيفة |
|---|---|
| switch(x) | تحديد المتغير المراد فحصه |
| case value: | حالة محتملة للمطابقة |
| break | إيقاف التنفيذ بعد تنفيذ case |
| default | الحالة الافتراضية عند عدم التطابق |
جملة switch هي بديل أنظف لسلسلة طويلة من else if عندما تريد مقارنة متغير واحد بعدة قيم محتملة. تبدأ بكتابة switch متبوعة بالتعبير المراد فحصه بين قوسين، ثم مجموعة من كتل case، كل واحدة تمثل قيمة محتملة، وكتلة اختيارية default تُنفذ إذا لم تتطابق أي حالة.
من أهم النقاط التي يجب فهمها جيداً هي كلمة break — بعد تنفيذ كود أي case، ينتقل التنفيذ تلقائياً إلى الحالة التالية ما لم تُوقفه بـ break صراحة، وتُسمى هذه الظاهرة "Fall-through". أحياناً يُستغل هذا السلوك عمداً لتنفيذ نفس الكود لعدة حالات متتالية بدون تكرار.
switch يستخدم المقارنة الصارمة (===) عند فحص الحالات، أي أنه يقارن القيمة والنوع معاً بدون أي تحويل ضمني — تماماً كعامل === في if. هذا يعني أن case "5" لن يتطابق مع القيمة الرقمية 5.
من الناحية العملية، تُفضَّل جملة switch على سلسلة else if الطويلة عندما تكون المقارنات كلها على نفس المتغير بقيم محددة (كأيام الأسبوع أو حالات نظام)، لأنها أوضح للقراءة وأسهل للصيانة. أما عندما تكون الشروط معقدة أو تشمل نطاقات (مثل أكبر من أو أصغر من)، تبقى if/else هي الخيار الأنسب.
| 1 | switch (المتغير) { |
| 2 | case القيمة1: |
| 3 | // كود ينفذ إذا تطابقت القيمة1 |
| 4 | break; |
| 5 | case القيمة2: |
| 6 | // كود آخر |
| 7 | break; |
| 8 | default: |
| 9 | // ينفذ إذا لم تتطابق أي حالة |
| 10 | } |
مثال 1: switch أساسي لتحديد اسم اليوم
| 1 | function اسم_اليوم(رقم) { |
| 2 | switch (رقم) { |
| 3 | case 1: |
| 4 | return "السبت"; |
| 5 | case 2: |
| 6 | return "الأحد"; |
| 7 | case 3: |
| 8 | return "الاثنين"; |
| 9 | default: |
| 10 | return "يوم غير معروف"; |
| 11 | } |
| 12 | } |
| 13 | console.log(اسم_اليوم(2)); // "الأحد" |
مثال 2: استخدام Fall-through لتجميع حالات متشابهة
| 1 | // استغلال Fall-through عمداً لعدة حالات متشابهة |
| 2 | function هل_عطلة(يوم) { |
| 3 | switch (يوم) { |
| 4 | case "الجمعة": |
| 5 | case "السبت": |
| 6 | return "عطلة نهاية الأسبوع"; |
| 7 | default: |
| 8 | return "يوم عمل"; |
| 9 | } |
| 10 | } |
| 11 | console.log(هل_عطلة("السبت")); // "عطلة نهاية الأسبوع" |