Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

الكلمة المفتاحية 'throw'

جزء من قسم Logic & Flow في رحلة C++ على Coddy — الدرس 50 من 56.

في بعض الأحيان تحتاج إلى الإشارة إلى وقوع خطأ في الكود الخاص بك، بدلاً من مجرد التقاط الاستثناءات التي يتم طرحها بواسطة دوال أخرى. تسمح لك الكلمة المفتاحية throw بإطلاق استثناء يدويًا عندما يكتشف برنامجك مشكلة ما.

يمكنك رمي أنواع مختلفة من القيم كاستثناءات - أعداد صحيحة، أو سلاسل نصية، أو حتى كائنات مخصصة. إليك الصيغة الأساسية:

if (someErrorCondition) {
    throw "Error message";  // يرمي سلسلة نصية ثابتة
}

عندما تستخدم throw، يتوقف البرنامج فوراً عن تنفيذ الدالة الحالية ويبحث عن كتلة catch يمكنها معالجة القيمة التي تم رميها. هذا مفيد بشكل خاص للتحقق من صحة المدخلات أو فحص الشروط التي لا ينبغي أن تحدث أثناء التنفيذ العادي للبرنامج.

إليك مثال عملي على رمي استثناء عند اكتشاف إدخال غير صالح:

void checkAge(int age) {
    if (age < 0) {
        throw "Age cannot be negative!";
    }
    std::cout << "Age is valid: " << age << std::endl;
}

تمنحك الكلمة المفتاحية throw التحكم في متى وكيف يتم الإبلاغ عن الأخطاء في برامجك، مما يجعل دوالك أكثر قوة وقابلية للتنبؤ عند التعامل مع الظروف غير الصالحة.

challenge icon

التحدي

سهل

قم بإنشاء برنامج ينفذ التحقق من صحة المدخلات باستخدام الكلمة المفتاحية throw لإطلاق الاستثناءات يدويًا عند اكتشاف شروط غير صالحة. سيختبر هذا التحدي فهمك لكيفية استخدام throw للإشارة إلى الأخطاء في دوالك الخاصة.

سيتم توفير المدخلات التالية:

  • سلسلة نصية username تمثل اسم المستخدم الذي اختاره المستخدم
  • عدد صحيح age يمثل عمر المستخدم

يجب على برنامجك القيام بما يلي:

  1. إنشاء دالة باسم validateUser تأخذ سلسلة نصية وعددًا صحيحًا كمعاملات
  2. داخل الدالة، تحقق مما إذا كان اسم المستخدم فارغًا (طوله 0)
  3. إذا كان اسم المستخدم فارغًا، قم بـ throw للسلسلة النصية "Username cannot be empty"
  4. تحقق مما إذا كان العمر أقل من 13
  5. إذا كان العمر أقل من 13، قم بـ throw للسلسلة النصية "Age must be at least 13"
  6. إذا نجحت كلتا عمليتي التحقق، اطبع "User validation successful"
  7. في الدالة الرئيسية، استدعِ validateUser مع قيم المدخلات
  8. استخدم كتلة try لاستدعاء الدالة وكتلة catch للتعامل مع أي استثناءات نصية يتم إطلاقها

استخدم تنسيق المخرجات الدقيق التالي:

للتحقق الناجح:

User validation successful

لأخطاء التحقق:

Validation error: [error_message]

تذكر أنه عندما تستخدم throw، يتوقف البرنامج فورًا عن تنفيذ الدالة الحالية ويبحث عن كتلة catch مطابقة. يجب أن تحدد كتلة catch النوع const char* للتعامل مع النصوص (string literals) التي تم إطلاقها. إذا فشل التحقق الأول، فستقوم الدالة بإطلاق استثناء ولن تستمر في التحقق من الشرط الثاني.

ورقة مرجعية

تسمح لك الكلمة المفتاحية throw بإطلاق الاستثناءات يدويًا عندما يكتشف برنامجك مشكلة ما:

if (someErrorCondition) {
    throw "Error message";  // يطلق سلسلة نصية ثابتة
}

عندما تستخدم throw، يتوقف البرنامج فورًا عن تنفيذ الدالة الحالية ويبحث عن كتلة catch يمكنها معالجة القيمة التي تم إطلاقها.

مثال على إطلاق استثناء للتحقق من صحة المدخلات:

void checkAge(int age) {
    if (age < 0) {
        throw "Age cannot be negative!";
    }
    std::cout << "Age is valid: " << age << std::endl;
}

يمكنك إطلاق أنواع مختلفة من القيم كاستثناءات - أعداد صحيحة، أو سلاسل نصية، أو كائنات مخصصة. استخدم const char* في كتل catch لمعالجة السلاسل النصية الثابتة التي يتم إطلاقها.

جرّب بنفسك

#include <iostream>
#include <string>
using namespace std;

int main() {
    // قراءة المدخلات
    string username;
    int age;
    cin >> username;
    cin >> age;
    
    // TODO: اكتب كودك هنا
    // قم بإنشاء دالة validateUser وتنفيذ منطق التحقق
    // استخدم كتل try-catch للتعامل مع الاستثناءات
    
    return 0;
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow