جملة switch
يمكنها استبدال العديد من جمل `if.
تعطي طريقة أفضل لمقارنة متغير مقابل مجموعة من القيم.
طريقة الكتابة
جملة switch
تحتوي على case
واحدة أو أكثر وحالة إفتراضية إختيارية.
مثل هذا:
switch(x) {
case 'value1': // if (x === 'value1')
...
[break]
case 'value2': // if (x === 'value2')
...
[break]
default:
...
[break]
}
- قيمة
x
يتم إختبار تساويها مع أولcase
(value1
) ثم تتنتقل إلى (value2
) وهكذا. - إذا وجد تساوي تبدأ
switch
بتنفيذ الكود ابتداءًا من هذه الcase
حتى أقربbreak
(أو نهايةswitch
). - إذا لم تطابق أي حالة يتم تنفيذ الكود بداخل
default
إذا وجدت.
مثال
مثال على switch
(تم نحديد الكود الذي سينفذ):
let a = 2 + 2;
switch (a) {
case 3:
alert( 'قليل جدًا' );
break;
case 4:
alert( 'تمامًا!' );
break;
case 5:
alert( 'كثير جدًا' );
break;
default:
alert( "لا أعرف هذه القيمة" );
}
تبدأ switch
بمقارنة قيمة a
بدايةً من أول case
التي هي 3
. لا تطابق.
ثم 4
. وهنا يحدث تطابق ويبدأ التنفيذ من case 4
حتى أقرب break
.
إذا لم يوجد break
يستمر تنفيذ case
التالية بدون فحص الشرط.
مثال بدون break
:
let a = 2 + 2;
switch (a) {
case 3:
alert( 'قليل جدًا' );
case 4:
alert( 'تمامًا!' );
case 5:
alert( 'كثير جدًا' );
default:
alert( "لا أعرف هذه القيمة" );
}
في هذا المثال سيتم تنفيذ ثلاثة أوامر alert
:
alert( 'تمامًا!' );
alert( 'كثير جدًا' );
alert( "لا أعرف هذه القيمة" );
switch/case
إن switch
و case
يسمحان باستخدام التعبيرات.
مثال:
let a = "1";
let b = 0;
switch (+a) {
case b + 1:
alert("سيتم تنفيذ هذا لأن +a هو 1 ويساوي تمامًا b+1");
break;
default:
alert("لن يتم تنفيذ هذا");
}
هنا +a
تعطي 1
ويتم مقارنتها مع b + 1
في case
وينفذ الكود.
تجميع “case”
يمكن تجميع العديد من case
التي تتشارك في نفس الأوامر.
مثلًا إذا أردنا تنفيذ نفس الأوامر في case 3
و case 5
:
let a = 3;
switch (a) {
case 4:
alert('صحيح!');
break;
case 3: // (*) تجميع حالتين
case 5:
alert('خطأ!');
alert("لماذا لا تأخذ روس في الرياضيات ؟");
break;
default:
alert('النتيجة غريبة حقًا.');
}
الآن كل من 3
و 5
يظهرون الرسالة.
إمكانية تجميع الحالات هي تأثير جانبي لطريقة عمل switch/case
بدون break
. هنا يبدأ التنفيذ من case 3
في السطر (*)
وينتقل إلى case 5
لعدم وجود break
.
الأنواع مهمة
عملية التساوي هي عملية حادة فيجب أن تكون القيم من نفس النوع ليتم التطابق.
على سبيل المثال لنأخذ البرنامج التالي:
let arg = prompt("أكتب قيمة ؟");
switch (arg) {
case '0':
case '1':
alert( 'صفر أو واحد' );
break;
case '2':
alert( 'أثنان' );
break;
case 3:
alert( 'لن ينفذ أبدًا!' );
break;
default:
alert( 'قيمة غير معروفة' );
}
- إذا أدخلنا
0
,1
يتم تنفيذ أولalert
. - إذا أدخلنا
2
يتم تنفيذ ثانيalert
. - ولكن إذا أدخلنا
3
تكون نتيجةprompt
هي النص"3"
الذي لا يطابق===
الرقم3
. لذلك لن يتم تنفيذ الأوامر في هذهcase 3
! وسيتم تنفيذdefault
.