جملة 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
.
التعليقات
<code>
، وللكثير من السطور استخدم<pre>
، ولأكثر من 10 سطور استخدم (plnkr, JSBin, codepen…)