switch
في JavaScript
التعبير البرمجي switch
يُستخدَم لمطابقة قيمة تعبير برمجي باستخدام عبارة case
، ثم يُنفِّذ التعابير البرمجية المرتبطة معها.
البنية العامة
switch (expression) {
case value1:
// التعابير البرمجية التي ستُطبِّق
// عندما تُطابِق قيمةُ التعبير قيمةَ الحالة
[break;]
case value2:
// التعابير البرمجية التي ستُطبِّق
// عندما تُطابِق قيمةُ التعبير قيمةَ الحالة
[break;]
...
case valueN:
// التعابير البرمجية التي ستُطبِّق
// عندما تُطابِق قيمةُ التعبير قيمةَ الحالة
[break;]
[default:
// التعابير البرمجية التي ستُطبِّق
// عندما لا تُطابِق قيمةُ التعبير أيّة حالة
[break;]]
}
expression
التعبير الذي سيُطابَق مع كل حالة (case).
case valueN
القسم case
الذي يُستخدَم لمطابقة التعبير expression
، وإذا طابق التعبير expression
القيمة valueN
، فستُنفَّذ التعلميات داخل القسم case
حتى نهاية التعبير البرمجي switch
أو وجود التعبير break
.
default
القسم default
، وهو يوفِّر التعابير البرمجية التي يجب تطبيقها إن لم تُطابَق أيّة حالة case
.
الوصف
تقبل switch تعبيرًا ثم ستبحث عن أوّل حالة case قيمتها تُطابِق قيمة التعبير تمامًا (باستخدام معامل المقارنة ===
) ثم ستنقل التحكم إلى قسم case المُطابَق مما يؤدي إلى تنفيذ التعابير البرمجية المرتبطة به (وإذا كانت هنالك أكثر من حالة تُطابِق القيمة المعطاة، فستُحدَّد أوّل حالة فقط).
إذا لم تكن هنالك حالة case
تُطابِق التعبير فسيبحث البرنامج عن قسم default
، وإن وجِدَ فسيُنقَل التحكم إلى ذلك القسم، مما يؤدي إلى تنفيذ التعابير البرمجية المرتبطة به، وإن لم يكن قسم default
موجودًا فسيُكمِل البرنامج تنفيذ التعابير البرمجية التي تلي نهاية switch
؛ ومن الشائع وضع قسم default
في نهاية switch
لكن ذلك ليس ضروريًا.
تعبير break
الاختياري يرتبط بإحدى الحالات وسيؤدي إلى خروج البرنامج من عبارة switch
وإكمال تنفيذ التعليمات التي تلي switch
؛ أما إذا لم يكن تعبير break
موجودًا فسيكمل البرنامج تنفيذ التعبيرات البرمجية التي تلي الحالة المُطابَقة في switch
.
أمثلة
استخدام switch
في المثال الآتي، إذا كانت قيمة التعبير expr
تساوي Bananas
، فسيُطابِق البرنامج الحالة Bananas
وسيُنفِّذ التعابير البرمجية المرتبطة معها، وعند تنفيذ التعبير break
فسيخرج البرنامج من switch
ثم يُنفِّذ التعابير البرمجية التي تلي switch
، وإذا حُذِفَ التعبير break
فستُنفَّذ التعابير المرتبطة مع الحالة Cherries
أيضًا:
switch (expr) {
case 'Oranges':
console.log('Oranges are $0.59 a pound.');
break;
case 'Apples':
console.log('Apples are $0.32 a pound.');
break;
case 'Bananas':
console.log('Bananas are $0.48 a pound.');
break;
case 'Cherries':
console.log('Cherries are $3.00 a pound.');
break;
case 'Mangoes':
case 'Papayas':
console.log('Mangoes and papayas are $2.79 a pound.');
break;
default:
console.log('Sorry, we are out of ' + expr + '.');
}
console.log("Is there anything else you'd like?");
نسيان وضع التعبير break
إذا نسيت وضع التعبير break
فسينفِّذ البرنامج التعابير البرمجية التي تلي الحالة المُطابَقة، وسيستمر بتنفيذ التعابير البرمجية في الحالات الأخرى التي تلي الحالة المُطابَقة حتى لو لم يتحقق الشرط. فمثلًا:
var foo = 0;
switch (foo) {
case -1:
console.log('negative 1');
break;
case 0: // سيُطابَق الشرط لذا ستنفَّذ التعابير البرمجية هنا
console.log(0);
// نسينا وضع break
case 1: // لم نخرج في الحالة الأولى، لذا سيستمر التنفيذ
console.log(1);
break; // لن ننتقل إلى تنفيذ الحالة التالية لوجود break
case 2:
console.log(2);
break;
default:
console.log('default');
}
موضع الحالة الافتراضية
يمكن وضع الحالة الافتراضية default
في أي مكان، وستُنفَّذ التعليمات التي تليها إن لم يُطابِق التعبير أحد الحالات:
var foo = 5;
switch (foo) {
case 2:
console.log(2);
break;
default:
console.log('default')
// ستُنفَّذ الحالة التالية لعدم وجود break
case 1:
console.log('1');
}
استخدام switch
بدلًا من عدِّة تعابير if
var a = 100;
var b = NaN;
switch (true) {
case isNaN(a) || isNaN(b):
console.log('NaNNaN');
break;
case a === b:
console.log(0);
break;
case a < b:
console.log(-1);
break;
default:
console.log(1);
}
تنفيذ تعابير برمجية عند مطابقة حالة أو أكثر
يمكن الاستفادة من سلوك switch
عند عدم توافر التعبير break
بإمكانية تنفيذ عملية ما إذا تمت مطابقة حالة أو أكثر:
var Animal = 'Giraffe';
switch (Animal) {
case 'Cow':
case 'Giraffe':
case 'Dog':
case 'Sheep':
console.log('This animal is cute.');
break;
case 'Dinosaur':
default:
console.log('This animal is NOT!.');
}
تنفيذ سلسلة من التعابير
سنستخدم سلسلة من التعابير في المثال الآتي التي يختلف ناتج تنفيذها حسب قيمة العدد الذي يجري اختباره. وهذا المثال يبيّن أنَّ بإمكانك جعل ترتيب الحالات كما تشاء، وليس من الضروري أن تكون مرتبةً؛ ويمكن أيضًا استخدام السلاسل النصية لمطابقة الناتج إضافةً إلى الأرقام (إن كان ذلك منطقيًا):
var foo = 1;
var output = 'Output: ';
switch (foo) {
case 10:
output += 'So ';
case 1:
output += 'What ';
output += 'Is ';
case 2:
output += 'Your ';
case 3:
output += 'Name';
case 4:
output += '?';
console.log(output);
break;
case 5:
output += '!';
console.log(output);
break;
default:
console.log('Please pick a number from 0 to 6!');
}
ناتج المثال السابق:
القيمة | الناتج |
---|---|
قيمة المتغير foo هي NaN أو ليست 1 أو 2 أو 3 أو 4 أو 5 أو 10 | Please pick a number from 0 to 6! |
10 | So What Is Your Name? |
1 | What Is Your Name? |
2 | Your Name? |
3 | Name? |
4 | ? |
5 | ! |
دعم المتصفحات
الميزة | Chrome | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
الدعم الأساسي | نعم | نعم | نعم | نعم | نعم |
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2015 (6th Edition).
- معيار ECMAScript 5.1.
- معيار ECMAScript 3rd Edition.