عبارة switch في C++
عبارة switch
إذا كانت لديك شجرة قرارات كبيرة , وكلها تعتمد علي قيم مختلفة لنفس المتغير , فإن صيغة العبارة switch تكون أكثر ملاءمة . وإليك برنامجا يخرج لك عبارة من عدة عبارات , بحسب الرقم الذي تختاره من بين عدة أرقام .
Platters.cpp
Platters.cpp
// platters.cpp
// demonstrates SWITCH statement
#include <iostream.h>
void main()
{
int speed; // turntable speed
cout << "\nEnter 33, 45, or 78: ";
cin >> speed; // user enters speed
switch(speed) // selection based on speed
{
case 33: // user entered 33
cout << "LP album\n";
break:
case 45: // user entered 45
cout << "Single selection\n";
break;
case 78: // user entered 78
cout << "Obsolete format\n";
break;
}
}
] قد تبدو العبارات المستخدمة في المثال بلا معني , والسبب أنها تسمية نوعيات أسطوانات الأغاني بحسب سرعاتها . طبقا للغة الأمريكية الدارجة , والمهم في الأمر هو الفكرة وللقارئ أن يعدل في هذه العبارات كما يتراءي له [
لدينا في هذا المثال متغيرا speed يمكن أن يأخذ أحد ثلاث قيم : 78 ,45 ,33 بحسب اختيار المستخدم , ومع كل اختيار , ستخرج عبارة معينة . وعلي ذلك فالعبارة :
Switch (speed)
تعني أن المتغير speed قابل للتبديل ] كلمة switch تعني تبديل [ بين قيم مختلفة . وتستخدم الكلمة الحاكمة case لبيان شرط بنتيجته , ] بمعني أنه في حالة الاختيار كذا , ستكون النتيجة كذا [ فالعبارات :
Case 33:
Cout << ''LP album'';
تعني أنه في حالة اختيارك للرقم 33 سوف تخرج لك الجملة المبينة . وبديهي أن نوع المتغير يجب أن يكون موفقا لنوع القيم التي يتبدل بينها . ويبين الشكل صياغة العبارة switch .
شكل صياغة العبارة switch
الكلمة الحاكمة break
بعد كل اختيار , توضع الكلمة الحاكمة break , وهي تدفع بالبرنامج للخروج من مجموعة الخيارات إلي خارجها , أي إلي أول سطر بعد القوس الحلزوني المحدد للكتلة الخاصة بها , وهو في برنامجنا هذا نهاية البرنامج . فمعني ذلك أنه بعد تنفيذ الخيار المطلوب ينتهي عمل مجموعة الخيارات , ويسير البرنامج بعد ذلك في طريقه . فإذا ما حدث ونسيت هذه الكلمة , ستجد أنك بعد تنفيذ خيارك , دخلت في الخيار التالي تلقائيا , ويسير البرنامج في غير الطريق الذي رسم له .
ما الذي يحدث إذا لم يوافق خيارك أيا من الخيارات السابقة ؟ في برنامجنا سوف يخرج البرنامج من مجموعة الخيارات , أي من كتلة العبارة switch بأكملها . ولكن هناك احتمال أخر , أن يحدد المبرمج للبرنامج خيارا ينفذه , ومن المتعارف عليه أن يسمي الخيار في هذه الحالة default وهو ما يعني أنه الخيار المبدئي الذي ينفذ في حالة عدم استخدام المستخدم لخيار أخر . وإليك برنامجا يستخدم هذه الفكرة , وهو يعيد صياغة برنامج لعبة المغامرات بأسلوب عبارة الخيارات switch .
Adswitch.cpp
adswitch.cpp
// adswitch.cpp
// demonstrates SWITCH with adventure program
#include <iostream.h>
#include <conio.h> // for getche()
void main()
{
char ucs='a';
int x=10, y=10;
while( ucs != '\r' )
{
cout << "\nYour location is " << x << ", " << y;
cout << "\nEnter direction (n, s, e, w): ";
ucs = getche(); // get character
switch(ucs) // switch on it
{
case 'n': y--; break; // go north
case 's': y++; break; // go south
case 'e': x++; break; // go east
case 'w': x--; break; // go west
case '\r': cout << "Exiting\n"; break; // Enter key
default: cout << "Try again\n"; // unknown char
} // end switch
} // end while
} // end main
ومتغير العبارة
switch هنا من النوع المحرفي . كما تلاحظ أن الكلمة break وضعت في نفس سطر عبارة الشرط case , وكما كررنا , لا يهتم المترجم بذلك , فالمسألة هي تنسيق البرنامج بحسب ذوق المبرمج .
ويحتوي البرنامج علي خيار إضافي مع خيارات الاتجاهات , وهو خيار الضرب علي مفتاح الإدخال , وعنده يطبع البرنامج كلمة exiting قبل خروجه , وهو المنفذ بالعبارة :
Cade '\r' : cout << ''exiting'':break;
وأخيرا ؛ يحتوي البرنامج علي الخيار المبدئي هنا يطبع رسالة للمستخدم أن يعيد المحاولة . وهي تبين المضمون من استخدام هذه الوسيلة , فكثيرا ما تستخدم لطباعة رسالة لتبينه المستخدم للخطأ الذي وقع فيه اختياره مثلا :
Default: cout << ''error, incorrect input to switch '';
الاختيار بين الصيغتين switch وif..else
حينما يكون متوقعا علي قيمة متغير بعينه , فإن العبارة switch تكون هي المناسبة . أما العبارة if…else فتتيح خيارات بين متغيرات مختلفة . ومن جهة أخري فالعبارة switch لا تقبل متغيرات النوع flot .
وعلي ذلك , فيمكن اعتبار العبارة switch صيغة مبسطة للخيارات , يجدر استخدامها كلما أمكن ذلك , لوضوحها وجمال تنسيقها .
لم افهم شيئا
ردحذف