🔥 أحدث الأخبار

موقع يهتم بكل ماهو جديد في عالم التكنولوجيا والرياضة

كورس C++ المتقدم – الحلقة الثانية: Exception Handling (معالجة الأخطاء)


 

كورس C++ المتقدم – الحلقة الثانية: Exception Handling (معالجة الأخطاء)

#برمجة

مقدمة

مرحباً بك في الحلقة الثانية من المستوى المتقدم في C++.

في الحلقة السابقة تعلمنا:

  • Templates
  • Function Templates
  • Class Templates
  • أساسيات الكود العام (Generic Programming)

اليوم سندخل موضوع مهم جداً في أي برنامج احترافي:

Exception Handling

أي معالجة الأخطاء أثناء تشغيل البرنامج.


لماذا نحتاج Exception Handling؟

تخيل برنامج آلة حاسبة:

int a = 10;
int b = 0;

cout << a / b;

المشكلة

قسمة على صفر!

هذا خطأ خطير وقد يؤدي إلى:

  • توقف البرنامج
  • Crash
  • سلوك غير متوقع

الطريقة التقليدية (الخاطئة أحياناً)

if(b != 0)
{
    cout << a / b;
}
else
{
    cout << "Error";
}

✔ تعمل
❌ لكنها ليست قوية في البرامج الكبيرة


الحل الاحترافي: Exception Handling


الكلمات الأساسية

الكلمة الوظيفة
try جرب تنفيذ الكود
catch التقط الخطأ
throw أطلق الخطأ

الشكل العام

try
{
    // code
}
catch(...)
{
    // error handler
}

مثال بسيط

#include <iostream>
using namespace std;

int main()
{
    try
    {
        int a = 10;
        int b = 0;

        if(b == 0)
        {
            throw "Division by zero error";
        }

        cout << a / b;
    }
    catch(const char* msg)
    {
        cout << "Error: " << msg;
    }

    return 0;
}

الناتج

Error: Division by zero error

كيف تعمل try و catch؟

  • try → ينفذ الكود
  • إذا حصل خطأ → ينتقل مباشرة إلى catch
  • البرنامج لا يتوقف

مثال عملي أقوى

إدخال مستخدم

#include <iostream>
using namespace std;

int main()
{
    try
    {
        int age;

        cout << "Enter age: ";
        cin >> age;

        if(age < 0)
        {
            throw "Age cannot be negative";
        }

        cout << "Age is: " << age;
    }
    catch(const char* msg)
    {
        cout << "Error: " << msg;
    }

    return 0;
}

أنواع throw

يمكنك رمي:

نص

throw "Error message";

رقم

throw 404;

float

throw 3.14;

catch متعددة

try
{
    throw 404;
}
catch(int code)
{
    cout << "Error code: " << code;
}
catch(...)
{
    cout << "Unknown error";
}

catch (...) يعني ماذا؟

يعني:

أي خطأ مهما كان نوعه


مثال كامل متعدد الأخطاء

#include <iostream>
using namespace std;

int main()
{
    try
    {
        int x = 5;

        if(x == 5)
            throw 500;

        if(x < 0)
            throw "Negative value";

    }
    catch(int code)
    {
        cout << "Error Code: " << code;
    }
    catch(const char* msg)
    {
        cout << "Message: " << msg;
    }
    catch(...)
    {
        cout << "Unknown error";
    }

    return 0;
}

إنشاء Exception مخصص

يمكنك إنشاء كلاس خاص بالأخطاء.


مثال

#include <iostream>
using namespace std;

class MyException
{
public:
    string message;

    MyException(string msg)
    {
        message = msg;
    }
};

الاستخدام

try
{
    throw MyException("Custom Error");
}
catch(MyException e)
{
    cout << e.message;
}

مثال احترافي: آلة حاسبة آمنة

#include <iostream>
using namespace std;

int main()
{
    try
    {
        int a, b;

        cout << "Enter A: ";
        cin >> a;

        cout << "Enter B: ";
        cin >> b;

        if(b == 0)
        {
            throw "Cannot divide by zero";
        }

        cout << "Result: " << a / b;
    }
    catch(const char* msg)
    {
        cout << "Error: " << msg;
    }

    return 0;
}

لماذا Exception مهم؟

✔ يمنع انهيار البرنامج
✔ يجعل البرامج احترافية
✔ يستخدم في جميع المكتبات الكبيرة
✔ أساسي في الأنظمة الحقيقية


مثال من الحياة الواقعية

تخيل تطبيق بنك:

  • إدخال رقم حساب خاطئ
  • رصيد غير كافي
  • اتصال مفقود

كلها تُعالج بـ Exceptions


الفرق بين if و try/catch

if try/catch
بسيط احترافي
محدود قوي جداً
لا يغطي كل الحالات يغطي كل الأخطاء

أخطاء شائعة

❌ نسيان catch

❌ رمي خطأ بدون معالجة

throw 10;

بدون catch

❌ استخدام try بدون داعي


تمرين 1

اصنع برنامج يقسم رقمين مع معالجة الخطأ.


تمرين 2

تحقق من العمر (لا يقبل سالب).


تمرين 3

أنشئ Exception مخصص للرصيد البنكي.


تمرين 4

استخدم catch متعددة الأنواع.


تمرين 5

اصنع نظام تسجيل دخول يتحقق من:

  • اسم المستخدم
  • كلمة المرور

ويعالج الأخطاء باستخدام try/catch.


ملخص الحلقة الثانية

تعلمنا:

  • try
  • catch
  • throw
  • معالجة الأخطاء
  • منع انهيار البرامج
  • Exception متعددة الأنواع
  • Exception مخصص
  • تطبيقات عملية

في الحلقة الثالثة من المستوى المتقدم سنتعلم:

🔥 Smart Pointers

وسنتعرف على:

  • unique_ptr
  • shared_ptr
  • weak_ptr
  • إدارة الذاكرة تلقائياً
  • بديل حديث لـ new و delete
  • كتابة برامج آمنة بدون Memory Leaks 🚀

تعليقات

💬 🙋🏻‍♂️