الكلمة المفتاحية 'throw'
جزء من قسم المنطق وتدفق التنفيذ في رحلة C++ على Coddy. الدرس 50 من 56.
أحيانًا تحتاج إلى الإشارة إلى حدوث error في التعليمات البرمجية الخاصة بك، بدلًا من مجرد التقاط exceptions التي تطرحها الدوال الأخرى. تتيح لك الكلمة المفتاحية throw تشغيل استثناء يدويًا عندما يكتشف برنامجك مشكلة.
يمكنك طرح أنواع مختلفة من القيم كاستثناءات - أعداد صحيحة، أو سلاسل نصية، أو حتى كائنات مخصّصة. إليك الصياغة الأساسية:
if (someErrorCondition) {
throw "Error message"; // يرمي سلسلة حرفية
}عند استخدام throw، يتوقف البرنامج فورًا عن تنفيذ الدالة الحالية ويبحث عن كتلة catch يمكنها التعامل مع القيمة المُلقاة. وهذا مفيد بشكل خاص للتحقق من صحة input أو فحص الشروط التي لا ينبغي أن تحدث أثناء التنفيذ العادي للبرنامج.
إليك مثالًا عمليًا على إطلاق استثناء عند اكتشاف إدخال غير صالح:
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
std::cout << "Age is valid: " << age << std::endl;
}تمنحك الكلمة المفتاحية throw التحكم في وقت الإبلاغ عن الأخطاء وكيفيته في برامجك، مما يجعل دوالك أكثر متانة وقابلية للتنبؤ عند التعامل مع الشروط غير الصالحة.
التحدي
سهلأنشئ برنامجًا ينفّذ validation للمدخلات باستخدام الكلمة المفتاحية throw لتشغيل exceptions يدويًا عند اكتشاف شروط غير صالحة. سيختبر هذا التحدي مدى فهمك لكيفية استخدام throw للإشارة إلى الأخطاء في الدوال function الخاصة بك.
سيتم توفير المدخلات التالية:
- قيمة من نوع
stringتمثل اسم المستخدم الذي اختاره المستخدم (قد يكون هذا السطر فارغًا) - عدد صحيح
ageيمثل عمر المستخدم
يجب أن يقوم برنامجك بما يلي:
- إنشاء function باسم
validateUserتأخذ قيمة من نوع string وعددًا صحيحًا كمعاملين - داخل function، التحقق مما إذا كان اسم المستخدم فارغًا (طوله 0)
- إذا كان اسم المستخدم فارغًا، استخدم
throwلإطلاق السلسلة النصية"Username cannot be empty" - التحقق مما إذا كان العمر أقل من 13
- إذا كان العمر أقل من 13، استخدم
throwلإطلاق السلسلة النصية"Age must be at least 13" - إذا نجحت عمليتا validation، اطبع
"User validation successful" - في function الرئيسية
main، استدعِvalidateUserباستخدام قيم الإدخال - استخدم كتلة
tryلاستدعاء function وكتلةcatchلمعالجة أي exceptions نصية تم إطلاقها
استخدم تنسيق الإخراج الدقيق التالي:
عند نجاح validation:
User validation successfulعند حدوث أخطاء في validation:
Validation error: [error_message]تذكّر أنه عند استخدام throw، يتوقف البرنامج فورًا عن تنفيذ function الحالية ويبحث عن كتلة catch مطابقة. يجب أن تحدد كتلة catch النوع const char* للتعامل مع السلاسل النصية الحرفية التي تم إطلاقها. إذا فشل التحقق الأول، فستطلق function استثناءً ولن تتابع التحقق من الشرط الثاني.
جرّب بنفسك
#include <iostream>
#include <string>
using namespace std;
int main() {
// اقرأ الإدخال
string username;
int age;
getline(cin, username);
cin >> age;
// TODO: اكتب الكود الخاص بك هنا
// أنشئ الدالة validateUser ونفّذ منطق التحقق
// استخدم كتل try-catch للتعامل مع الاستثناءات
return 0;
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1المؤشرات والذاكرة
ما هو المؤشر؟معامل العنوان (Address-Of)معامل الوصول للقيمة (Dereference)المؤشرات الفارغة (Null Pointers)المؤشرات والمصفوفاتالذاكرة الديناميكية باستخدام 'new'تحرير الذاكرة باستخدام 'delete'مراجعة - تمارين على المؤشرات2المتجهات (المصفوفات الديناميكية)
مقدمة إلى std::vectorإنشاء Vectorإضافة العناصرالوصول إلى العناصرحجم الـ Vectorالتكرار باستخدام For Loopالـ Range-Based For Loopإزالة العناصرملخص - عمليات الـ Vector5مشروع: أداة المخزون
إعداد المشروعإضافة وتحديث العناصر8أساسيات معالجة الأخطاء
مقدمة في الاستثناءاتكتل 'try' و 'catch'الكلمة المفتاحية 'throw'أنواع الاستثناءات المختلفةمعالج كافة الاستثناءاتمراجعة - القسمة الآمنةتدرّب بنفسك: مترجم C++ عبر الإنترنت