الجملـة switch:
الجملـة switch إحدى جمل إتخاذ القرارات ، إلا أنها هذه المرة تعتبر جملـة if
متطـورة ، حيـث أنــه لـيس هــناك أي فـرق بينهـا وبينهـا الجملــة if متعــددة
الإتجاهات ، وتصاغ هذه العـملية حسب الصيغـة التالية:
switch (expression) {
case const-expr: statements ;
case const-expr: statements ;
default: statements ;
}
بإمكاننـا إختصـار شــرح هـذه الصيغــة العامــة ، إلـى أنــه بإمكانـك أن تكتـب
المتغير الذي تريد إختباره (في مثال الآلـة الحاسـبة كـان المتغيـر x ) وتكتبــه
بين قوسين بعـد عبارة switch ، بعـد ذلك تقوم بكتابة الحالات المتوقعـة لهـذا
المتغير بعـد الكلمـة الدليليـة x ، وفي حال مطابقـة إحـدى هـذه الحـالات مـع
المتغير يتم تنفيذ الجمل التي تختص بتلك الحالة وفي حال عـدم موافقـة أي
منهــا فبإمكانــك كتابــة حالــة عامـــة (تشــبه الجملـــة else فــي مثــال الآلــة
الحاســبة) ، قــد تــرى أن هـــناك الكثيــر مــن التشابـــه بــين الجملـــة if/else
والجملـة switch ، إلا أن هـناك بعض الفروق البسيطـة التي قد تكـون مـؤثرة
في بعض الأحايين :
1- في حال مطابقـة إحدى الحالات مع المتغير المراد اختباره فـإن الحالـة
نفسها لا تُعتبر خيار من خيارات متعـددة بل تعتبـر نقطــة بدايــة لتنفيـذ
العبــارة switch ؛ بالنســبة للجملـــة if/else فــإن الأمــر يعتبــر خيــارات
وليس نقطـة بداية.
2- في حال تنفيذ إحدى الحالات فإن البرنامج لا يخرج من الجملـة switch
بل يستمر في التنفيذ والبحث عـن حـالات أخـرى مشابهــة وفـي حـال
وجدها يقوم بتنفيذها ، بإمكانـك الخـروج مـن الجملــة switch إذا أردت
عبر الكلمة الدليليـة break ، وفي حال عـدم رغبتـك فـي الخـروج فـإن
البرنامج سيستمر في البحث عـن حالات مشابهـة حتـى يصـل للحالـة
العامـة default ويقوم بتنفيذها علـى الرغــم مـن وجـود حـالات أخـرى
مطابقـة.
الآن سنقوم بإعـادة كتابـة مثـال الآلـة الحاسبــة ، ولكـن هـذه المـرة بالعبـارة
switch وسترى الفرق بينها وبين الجملـة if/else :
CODE
1- #include <iostream>
2- using namespace std;
3-
4- int main()
5- {
6- float a,b;
7- char x;
8-
9- cout << "Enter Number1:\t" ;
10- cin >> a;
11- cout << "Enter Number2:\t" ;
12- cin >> b;
13- cout << "Enter the operator\t";
14- cin >> x;
15-
16- cout << endl << endl;
17-
18- cout << "Result:\t";
19-
20- switch (x) {
21- case '+':
22- cout << a+b ;
23- break;
24- case '-':
25- cout << a-b;
26- break;
27- case '*':
28- cout << a*b;
29- break;
30- case'/':
31- cout << a/b;
32- break;
33- default:
34- cout << "Bad Command";
35- }
36-
37- cout << endl;
38-
39- return 0;
40- }
هذا هـو البرنامج بشكل عام وبالنظر إلى أني قمت بشرحـه سـابقاً فسـأقوم
بشرح عبارة switch فحسب ، انظر:
1- switch (x) {
2- case '+':
3- cout << a+b ;
4- break;
5- case '-':
6- cout << a-b;
7- break;
8- case '*':
9- cout << a*b;
10- break;
11- case'/':
12- cout << a/b;
13- break;
14- default:
15- cout << "Bad Command";
16- }
أول شيء يجب النظر إليـه أن تفرعـات الجملــة switch ليسـت مثـل جمـل if
السابقــة بـل تبـدأ بالكلمــة المفتاحيــة case ، فمـثلاً لـو نظرنـا إلـى السـطر
الثاني فإن الأمر أشبـه ما يكون هـكذا:
if ( x=='+')
الآن لنفــرض أن المســتخدم قــام بإدخــال العـــددين 5 و 6 وأدخــل * كعـــملية
حسابية ، وكما تعلم فإن المتغير x هـو العـملية الحسابية وهـو المتغير الـذي
تقوم العبارة switch سيبدأ تنفيذ البرنامج وسينتقل إلى السطر 2 وكمـا تـرى
فإنـه لا وجود للحالة الاولى بالنسبة للعـملية * ، ينتقل التنفيذ بعـد ذلـك إلـى
الحالة الثانية فـي السـطر 5 وكمـا تـرى فلـيس هــناك أي مطابقــة وبالتـالي
فسينتقل التنفيـذ إلـى الحالـة الثالثــة فـي السـطر 8 وكمـا تـرى فـإن هــناك
مطابقـة بالفعل وبالتالي يدخل البرنامج في هذه الحالة التي يوجد لها أمـران
فقط الأول يطبع القيمـة والأمر الثاني يطلب من البرنامج الخروج نهائيـاً وتـرك
الجملـــة switch ومواصــلة ســير البرنــامج بشــكل طبيعــي وهـــي الكلمــة
المفتاحية break ، في حال عـدم وجود الكلمـة break فإن البرنامج سيواصل
التنفيذ وسيقوم بالدخـول في الحالة الرابعـة وبالطبع فلا وجود لمطابقــة مـع
المتغير x وبالتالي ينتقل التنفيذ إلى الحالة العامــة وسـيقوم بتنفيـذ أوامرهـا
بالإضافة لتنفيذه أوامر عـملية الضرب ، لذلك احرص دائماً على الخـروج الآمـن
والسليم من العبارة switch .
محاذير حول الجملـة switch :
ينبغـي لنا هـنا أن نتحدث قليلاً عـن القيمـة التي تقوم الــ switch بإختبارهـا ،
تذكر أن ما تقوم هذه الجملـة بإختباره هـو المتغيرات وفقط ولا شـيء آخـر، لا
تستطيع أن تقوم بكتابة أي تعبير لاختباره ، وقد ترى أن ذلك يقلـل مـن قيمــة
switch إلا أن هذا غيـر صـحيح فبإمكــانك التوصـل إلـى نفـس الهــدف بطـرق
أخرى غير ما هـو مفترض أو بديهي. اعــتمد فـي هـذا الأمـر علـى تفكيـرك أو
حتى خيالك الواسع.
الجملـة switch إحدى جمل إتخاذ القرارات ، إلا أنها هذه المرة تعتبر جملـة if
متطـورة ، حيـث أنــه لـيس هــناك أي فـرق بينهـا وبينهـا الجملــة if متعــددة
الإتجاهات ، وتصاغ هذه العـملية حسب الصيغـة التالية:
switch (expression) {
case const-expr: statements ;
case const-expr: statements ;
default: statements ;
}
بإمكاننـا إختصـار شــرح هـذه الصيغــة العامــة ، إلـى أنــه بإمكانـك أن تكتـب
المتغير الذي تريد إختباره (في مثال الآلـة الحاسـبة كـان المتغيـر x ) وتكتبــه
بين قوسين بعـد عبارة switch ، بعـد ذلك تقوم بكتابة الحالات المتوقعـة لهـذا
المتغير بعـد الكلمـة الدليليـة x ، وفي حال مطابقـة إحـدى هـذه الحـالات مـع
المتغير يتم تنفيذ الجمل التي تختص بتلك الحالة وفي حال عـدم موافقـة أي
منهــا فبإمكانــك كتابــة حالــة عامـــة (تشــبه الجملـــة else فــي مثــال الآلــة
الحاســبة) ، قــد تــرى أن هـــناك الكثيــر مــن التشابـــه بــين الجملـــة if/else
والجملـة switch ، إلا أن هـناك بعض الفروق البسيطـة التي قد تكـون مـؤثرة
في بعض الأحايين :
1- في حال مطابقـة إحدى الحالات مع المتغير المراد اختباره فـإن الحالـة
نفسها لا تُعتبر خيار من خيارات متعـددة بل تعتبـر نقطــة بدايــة لتنفيـذ
العبــارة switch ؛ بالنســبة للجملـــة if/else فــإن الأمــر يعتبــر خيــارات
وليس نقطـة بداية.
2- في حال تنفيذ إحدى الحالات فإن البرنامج لا يخرج من الجملـة switch
بل يستمر في التنفيذ والبحث عـن حـالات أخـرى مشابهــة وفـي حـال
وجدها يقوم بتنفيذها ، بإمكانـك الخـروج مـن الجملــة switch إذا أردت
عبر الكلمة الدليليـة break ، وفي حال عـدم رغبتـك فـي الخـروج فـإن
البرنامج سيستمر في البحث عـن حالات مشابهـة حتـى يصـل للحالـة
العامـة default ويقوم بتنفيذها علـى الرغــم مـن وجـود حـالات أخـرى
مطابقـة.
الآن سنقوم بإعـادة كتابـة مثـال الآلـة الحاسبــة ، ولكـن هـذه المـرة بالعبـارة
switch وسترى الفرق بينها وبين الجملـة if/else :
CODE
1- #include <iostream>
2- using namespace std;
3-
4- int main()
5- {
6- float a,b;
7- char x;
8-
9- cout << "Enter Number1:\t" ;
10- cin >> a;
11- cout << "Enter Number2:\t" ;
12- cin >> b;
13- cout << "Enter the operator\t";
14- cin >> x;
15-
16- cout << endl << endl;
17-
18- cout << "Result:\t";
19-
20- switch (x) {
21- case '+':
22- cout << a+b ;
23- break;
24- case '-':
25- cout << a-b;
26- break;
27- case '*':
28- cout << a*b;
29- break;
30- case'/':
31- cout << a/b;
32- break;
33- default:
34- cout << "Bad Command";
35- }
36-
37- cout << endl;
38-
39- return 0;
40- }
هذا هـو البرنامج بشكل عام وبالنظر إلى أني قمت بشرحـه سـابقاً فسـأقوم
بشرح عبارة switch فحسب ، انظر:
1- switch (x) {
2- case '+':
3- cout << a+b ;
4- break;
5- case '-':
6- cout << a-b;
7- break;
8- case '*':
9- cout << a*b;
10- break;
11- case'/':
12- cout << a/b;
13- break;
14- default:
15- cout << "Bad Command";
16- }
أول شيء يجب النظر إليـه أن تفرعـات الجملــة switch ليسـت مثـل جمـل if
السابقــة بـل تبـدأ بالكلمــة المفتاحيــة case ، فمـثلاً لـو نظرنـا إلـى السـطر
الثاني فإن الأمر أشبـه ما يكون هـكذا:
if ( x=='+')
الآن لنفــرض أن المســتخدم قــام بإدخــال العـــددين 5 و 6 وأدخــل * كعـــملية
حسابية ، وكما تعلم فإن المتغير x هـو العـملية الحسابية وهـو المتغير الـذي
تقوم العبارة switch سيبدأ تنفيذ البرنامج وسينتقل إلى السطر 2 وكمـا تـرى
فإنـه لا وجود للحالة الاولى بالنسبة للعـملية * ، ينتقل التنفيذ بعـد ذلـك إلـى
الحالة الثانية فـي السـطر 5 وكمـا تـرى فلـيس هــناك أي مطابقــة وبالتـالي
فسينتقل التنفيـذ إلـى الحالـة الثالثــة فـي السـطر 8 وكمـا تـرى فـإن هــناك
مطابقـة بالفعل وبالتالي يدخل البرنامج في هذه الحالة التي يوجد لها أمـران
فقط الأول يطبع القيمـة والأمر الثاني يطلب من البرنامج الخروج نهائيـاً وتـرك
الجملـــة switch ومواصــلة ســير البرنــامج بشــكل طبيعــي وهـــي الكلمــة
المفتاحية break ، في حال عـدم وجود الكلمـة break فإن البرنامج سيواصل
التنفيذ وسيقوم بالدخـول في الحالة الرابعـة وبالطبع فلا وجود لمطابقــة مـع
المتغير x وبالتالي ينتقل التنفيذ إلى الحالة العامــة وسـيقوم بتنفيـذ أوامرهـا
بالإضافة لتنفيذه أوامر عـملية الضرب ، لذلك احرص دائماً على الخـروج الآمـن
والسليم من العبارة switch .
محاذير حول الجملـة switch :
ينبغـي لنا هـنا أن نتحدث قليلاً عـن القيمـة التي تقوم الــ switch بإختبارهـا ،
تذكر أن ما تقوم هذه الجملـة بإختباره هـو المتغيرات وفقط ولا شـيء آخـر، لا
تستطيع أن تقوم بكتابة أي تعبير لاختباره ، وقد ترى أن ذلك يقلـل مـن قيمــة
switch إلا أن هذا غيـر صـحيح فبإمكــانك التوصـل إلـى نفـس الهــدف بطـرق
أخرى غير ما هـو مفترض أو بديهي. اعــتمد فـي هـذا الأمـر علـى تفكيـرك أو
حتى خيالك الواسع.
ليست هناك تعليقات:
إرسال تعليق