الشروط في C++: if و switch
الشروط هي ما يجعل البرنامج «يفكر»: يتصرف بطريقة مختلفة حسب الموقف. إذا كنت درست C، فستجد الشروط في C++ مألوفة جداً، مع تحسينات مريحة، أهمها أن مقارنة النصوص أصبحت سهلة وطبيعية. وإذا كانت هذه أول لغة تتعلم فيها الشروط، فهذا الدرس يشرحها من البداية.
if و else
Section titled “if و else”int score = 72;
if (score >= 90) { cout << "ممتاز" << endl;} else if (score >= 50) { cout << "ناجح" << endl;} else { cout << "راسب" << endl;}ناجحC++ تفحص الشروط من الأعلى، وتنفّذ أول فرع صحيح فقط ثم تتخطى الباقي.
تخيّل الشروط مثل لافتات الطريق في تقاطع: تقرأ اللافتة الأولى، فإن انطبقت عليك تسلك طريقها، وإلا تنظر للتالية، وإن لم تنطبق أي لافتة تأخذ الطريق الافتراضي (else).
عوامل المقارنة: == و != و > و < و >= و <=.
العوامل المنطقية: && (و)، و || (أو)، و ! (ليس):
int age = 16;bool hasTicket = true;if (age >= 13 && hasTicket) { cout << "تفضل بالدخول" << endl;}تفضل بالدخولمقارنة النصوص
Section titled “مقارنة النصوص”مع النوع string، تعمل المقارنة بـ == بشكل طبيعي وتقارن المحتوى:
string password = "1234";if (password == "1234") { cout << "كلمة المرور صحيحة" << endl;}كلمة المرور صحيحةهذا تحسين كبير عن C، حيث كان يجب استخدام strcmp، وعن Java حيث تقارن == العناوين. في C++ مع string، ما تتوقعه هو ما يحدث.
المعامل الثلاثي
Section titled “المعامل الثلاثي”int stock = 0;string status = stock > 0 ? "متوفر" : "غير متوفر";cout << status << endl;غير متوفر«الشرط ؟ القيمة إذا صح : القيمة إذا خطأ». مفيد لاختيار قيمة في سطر واحد.
switch
Section titled “switch”للمقارنة مع قيم ثابتة متعددة، مثل الأرقام والحروف:
char op = '*';int a = 6, b = 3;switch (op) { case '+': cout << a + b << endl; break; case '*': cout << a * b << endl; break; default: cout << "عملية غير معروفة" << endl;}18- كل
caseتنتهي بـbreak، وإلا ينزلق التنفيذ للحالة التالية. defaultلكل قيمة لم تُذكر.switchتعمل مع الأعداد الصحيحة والحروف، ولا تعمل معstring. للنصوص استخدمifوelse if.
الشرط مع التهيئة (C++17)
Section titled “الشرط مع التهيئة (C++17)”في C++ الحديثة، يمكنك تعريف متغير داخل الشرط نفسه:
if (int total = 650; total >= 500) { cout << "شحن مجاني" << endl;} else { cout << "الشحن 40 جنيهاً" << endl;}شحن مجانيالمتغير total موجود فقط داخل هذا الشرط وفروعه، ويختفي بعده. هذا يُبقي الكود نظيفاً عندما تحتاج متغيراً مؤقتاً للفحص فقط.
جرّب بنفسك
Section titled “جرّب بنفسك”اكتب برنامج تقييم سرعة إنترنت:
- متغير
speedبوحدة ميجابت. - بـ
ifوelse if: أقل من 5 «بطيء»، ومن 5 إلى 50 «جيد»، وأكثر من 50 «ممتاز». - متغير
planمن نوعstring، وإذا كان"premium"اطبع «لديك دعم فني أولوية». - تحدٍّ: آلة حاسبة بـ
switchعلى الحرفopتدعم العمليات الأربع، وترفض القسمة على صفر.
أخطاء شائعة
Section titled “أخطاء شائعة”- نسيان break في switch: تُنفَّذ الحالات التالية أيضاً.
- switch مع string: خطأ ترجمة. استخدم
ifوelse if. - فاصلة منقوطة بعد if:
if (x > 5);تجعل الشرط بلا جسم، والكود بعده يُنفَّذ دائماً!
اختبر نفسك
Section titled “اختبر نفسك”سؤال
في C++، كيف تقارن متغيراً من نوع string بالنص «admin»؟
النوع string في C++ يدعم المقارنة بـ == وتقارن المحتوى مباشرة.
سؤال
ما الأنواع التي يعمل معها switch في C++؟
switch يعمل مع القيم الصحيحة مثل int و char، ولا يعمل مع string أو double.
الخلاصة
Section titled “الخلاصة”ifوelse ifوelseللقرارات، وأول فرع صحيح فقط يُنفَّذ.stringتُقارن بـ==مباشرة حسب المحتوى.- المعامل الثلاثي لاختيار قيمة في سطر واحد.
switchللأعداد والحروف، وbreakضرورية في كل حالة.- C++17 تسمح بتعريف متغير داخل
ifليبقى في نطاقه فقط.