يمكن أن تحل عبارة switch if عمليات التحقق المتعددة.
إنه يوفر طريقة وصفية أكثر لمقارنة قيمة بمتغيرات متعددة.
يحتوي switch على كتلة case واحدة أو أكثر وافتراضي اختياري.
يبدو مثل هذا:
التبديل (خ) {
الحالة 'القيمة1': // إذا (x === 'القيمة1')
...
[استراحة]
الحالة 'القيمة2': // إذا (x === 'القيمة2')
...
[استراحة]
تقصير:
...
[استراحة]
} يتم التحقق من قيمة x للتأكد من أنها تساوي تمامًا القيمة من case الأولى (أي value1 ) ثم إلى الحالة الثانية ( value2 ) وهكذا.
إذا تم العثور على المساواة، يبدأ switch في تنفيذ التعليمات البرمجية بدءًا من case المقابلة، حتى أقرب break (أو حتى نهاية switch ).
إذا لم تتم مطابقة أي حالة، فسيتم تنفيذ الكود default (إذا كان موجودًا).
مثال على switch (يتم تمييز الكود الذي تم تنفيذه):
دع أ = 2 + 2؛
التبديل (أ) {
الحالة 3:
تنبيه ("صغير جدًا")؛
استراحة؛
الحالة 4:
تنبيه ("بالضبط!")؛
استراحة؛
الحالة 5:
تنبيه ("كبير جدًا")؛
استراحة؛
تقصير:
تنبيه ("لا أعرف مثل هذه القيم")؛
} هنا يبدأ switch في مقارنة a case الأول وهو 3 . المباراة فشلت.
ثم 4 . هذه تطابق، لذا يبدأ التنفيذ من case 4 حتى أقرب break .
إذا لم يكن هناك break ، فسيستمر التنفيذ مع case التالية دون أي فحوصات.
مثال بدون break :
دع أ = 2 + 2؛
التبديل (أ) {
الحالة 3:
تنبيه ("صغير جدًا")؛
الحالة 4:
تنبيه ("بالضبط!")؛
الحالة 5:
تنبيه ("كبير جدًا")؛
تقصير:
تنبيه ("لا أعرف مثل هذه القيم")؛
} في المثال أعلاه، سنرى التنفيذ المتسلسل لثلاثة alert :
تنبيه ("بالضبط!")؛
تنبيه ("كبير جدًا")؛
تنبيه ("لا أعرف مثل هذه القيم")؛ يمكن لأي تعبير أن يكون وسيطة switch/case
يسمح كل من switch case بالتعبيرات التعسفية.
على سبيل المثال:
دع = "1"؛
دع ب = 0؛
التبديل (+أ) {
الحالة ب + 1:
تنبيه ("يتم تنفيذ هذا، لأن +a هو 1، يساوي بالضبط b+1");
استراحة؛
تقصير:
تنبيه ("هذا لا يعمل")؛
} هنا +a يعطي 1 ، مقارنة بـ b + 1 في case ، ويتم تنفيذ الكود المقابل.
يمكن تجميع العديد من أنواع case التي تشترك في نفس الرمز.
على سبيل المثال، إذا أردنا تشغيل نفس الكود case 3 والحالة case 5 :
دع = 3؛
التبديل (أ) {
الحالة 4:
تنبيه ("صحيح!")؛
استراحة؛
الحالة 3: // (*) جمعت حالتين
الحالة 5:
تنبيه ("خطأ!")؛
تنبيه("لماذا لا تحضر دروس الرياضيات؟");
استراحة؛
تقصير:
تنبيه('النتيجة غريبة. حقا.');
} الآن يعرض كلا الرقمين 3 و 5 نفس الرسالة.
تعد القدرة على "تجميع" الحالات أحد الآثار الجانبية لكيفية عمل switch/case دون break . هنا يبدأ تنفيذ case 3 من السطر (*) ويمر case 5 ، لأنه لا يوجد break .
دعونا نؤكد على أن التحقق من المساواة يكون دائمًا صارمًا. يجب أن تكون القيم من نفس النوع للمطابقة.
على سبيل المثال، دعونا نفكر في الكود:
Let arg = موجه("أدخل قيمة؟");
التبديل (أرج) {
الحالة '0':
الحالة '1':
تنبيه ("واحد أو صفر")؛
استراحة؛
الحالة '2':
تنبيه("اثنان");
استراحة؛
الحالة 3:
تنبيه ("لا يتم التنفيذ أبدًا!" );
استراحة؛
تقصير:
تنبيه ("قيمة غير معروفة")؛
} بالنسبة إلى 0 ، 1 ، يتم تشغيل alert الأول.
لمدة 2 يتم تشغيل alert الثاني.
لكن بالنسبة لـ 3 ، فإن نتيجة prompt هي سلسلة نصية "3" ، وهي لا تساوي تمامًا === الرقم 3 . إذن لدينا رمز ميت في case 3 ! سيتم تنفيذ المتغير default .
الأهمية: 5
اكتب الكود باستخدام if..else والذي يتوافق مع switch التالي:
التبديل (المتصفح) {
حالة "الحافة":
تنبيه("لقد حصلت على الحافة!" );
استراحة؛
حالة "كروم":
حالة "فايرفوكس":
حالة "سفاري":
حالة "الأوبرا":
تنبيه ("حسنًا، نحن ندعم هذه المتصفحات أيضًا")؛
استراحة؛
تقصير:
تنبيه("نأمل أن تبدو هذه الصفحة على ما يرام!" );
}
لمطابقة وظيفة switch بدقة، if استخدام مقارنة صارمة '===' .
بالنسبة للسلاسل المعطاة، يعمل الرمز '==' البسيط أيضًا.
إذا (المتصفح == 'الحافة') {
تنبيه("لقد حصلت على الحافة!");
} وإلا إذا (المتصفح == 'Chrome'
|| المتصفح == "فايرفوكس"
|| المتصفح == "سفاري"
|| المتصفح == 'الأوبرا') {
تنبيه ("حسنًا، نحن ندعم هذه المتصفحات أيضًا")؛
} آخر {
تنبيه("نأمل أن تبدو هذه الصفحة على ما يرام!" );
} يرجى ملاحظة: browser == 'Chrome' || browser == 'Firefox' … مقسم إلى أسطر متعددة لتسهيل القراءة.
لكن بناء switch لا يزال أنظف وأكثر وصفًا.
الأهمية: 4
أعد كتابة الكود أدناه باستخدام عبارة switch واحدة:
Let a = +prompt('a?', '');
إذا (أ == 0) {
تنبيه(0);
}
إذا (أ == 1) {
تنبيه(1);
}
إذا (أ == 2 || أ == 3) {
تنبيه('2,3');
}
يتحول الشيكان الأولان إلى case . والفحص الثالث ينقسم إلى حالتين:
Let a = +prompt('a?', '');
التبديل (أ) {
الحالة 0:
تنبيه(0);
استراحة؛
الحالة 1:
تنبيه(1);
استراحة؛
الحالة 2:
الحالة 3:
تنبيه('2,3');
استراحة؛
} يرجى ملاحظة: break في الأسفل غير مطلوبة. لكننا وضعناها لجعل الكود مقاومًا للمستقبل.
في المستقبل، هناك احتمال أن نرغب في إضافة case أخرى، على سبيل المثال case 4 . وإذا نسينا إضافة فاصل قبله، في نهاية case 3 ، سيكون هناك خطأ. لذلك هذا نوع من التأمين الذاتي.