Skip to content

الفصل 7: معالجة الأخطاء

📖 المستوى: مبتدئ  |  ⏱ الوقت المقدّر: 45 دقيقة  |  📝 تمارين: 6

ما ستتعلم في هذا الفصل

  • ماهية الأخطاء وأنواعها
  • استخدام حاول / امسك / أخيراً
  • رمي أخطاء مخصصة باستخدام ارمي
  • إنشاء أصناف أخطاء خاصة
  • أنماط معالجة الأخطاء المهنية

7.1 لماذا نحتاج معالجة الأخطاء؟

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


7.2 حاول / امسك

sad
حاول
    متغير نتيجة = 10 / 0
    اطبع_سطر(نتيجة)
امسك (خطأ)
    اطبع_سطر("❌ حدث خطأ: " + خطأ)
نهاية

مع أخيراً

كتلة أخيراً تُنفَّذ دائماً سواء حدث خطأ أم لا:

sad
حاول
    اطبع_سطر("محاولة فتح الملف...")
    # كود قد يسبب خطأ
    ارمي "الملف غير موجود"
امسك (خطأ)
    اطبع_سطر("❌ " + خطأ)
أخيراً
    اطبع_سطر("🔒 تنظيف الموارد...")
نهاية

7.3 رمي أخطاء مخصصة

sad
دالة قسمة(أ، ب)
    إذا (ب == 0)
        ارمي "لا يمكن القسمة على صفر!"
    نهاية
    ارجع أ / ب
نهاية

حاول
    متغير نتيجة = قسمة(10، 0)
    اطبع_سطر(نتيجة)
امسك (خطأ)
    اطبع_سطر("خطأ: " + خطأ)
نهاية

دالة تحقق بأخطاء وصفية

sad
دالة تحقق_عمر(عمر)
    إذا (نوع(عمر) != "رقم")
        ارمي "العمر يجب أن يكون رقماً"
    نهاية
    إذا (عمر < 0)
        ارمي "العمر لا يمكن أن يكون سالباً"
    نهاية
    إذا (عمر > 150)
        ارمي "العمر غير واقعي"
    نهاية
    ارجع صحيح
نهاية

حاول
    تحقق_عمر(-5)
امسك (خطأ)
    اطبع_سطر("❌ " + خطأ)   # العمر لا يمكن أن يكون سالباً
نهاية

7.4 أصناف أخطاء مخصصة

sad
صنف خطأ_تحقق
    متغير رسالة
    متغير الحقل

    باني(رسالة، حقل)
        هذا.رسالة = رسالة
        هذا.الحقل = حقل
    نهاية
نهاية

دالة تحقق_بريد(بريد)
    إذا (طول(بريد) == 0)
        ارمي جديد خطأ_تحقق("البريد مطلوب"، "بريد")
    نهاية
    ارجع صحيح
نهاية

حاول
    تحقق_بريد("")
امسك (خطأ)
    اطبع_سطر("خطأ في حقل " + خطأ.الحقل + ": " + خطأ.رسالة)
نهاية

7.5 أنماط معالجة الأخطاء

النمط الدفاعي — تحقق قبل أن تخطئ

sad
دالة اقرأ_عنصر(مصفوفة، فهرس)
    إذا (فهرس < 0 أو فهرس >= طول(مصفوفة))
        ارجع لاشيء   # بدلاً من الخطأ
    نهاية
    ارجع مصفوفة[فهرس]
نهاية

نمط إعادة المحاولة

sad
دالة حاول_عدة_مرات(دالة_عملية، عدد_المحاولات)
    متغير محاولة = 1
    بينما (محاولة <= عدد_المحاولات)
        حاول
            ارجع دالة_عملية()
        امسك (خطأ)
            اطبع_سطر("محاولة " + محاولة + " فشلت: " + خطأ)
            محاولة = محاولة + 1
        نهاية
    نهاية
    ارمي "فشلت جميع المحاولات"
نهاية

تمارين

تمرين 1: حاسبة آمنة

اكتب حاسبة تعالج الأخطاء (قسمة على صفر، عمليات غير معروفة).

💡 الحل
sad
دالة احسب(أ، عملية، ب)
    طابق (عملية)
        عندما "+":
            ارجع أ + ب
        عندما "-":
            ارجع أ - ب
        عندما "*":
            ارجع أ * ب
        عندما "/":
            إذا (ب == 0)
                ارمي "لا يمكن القسمة على صفر"
            نهاية
            ارجع أ / ب
        افتراضي:
            ارمي "عملية غير معروفة: " + عملية
    نهاية
نهاية

حاول
    اطبع_سطر(احسب(10، "+"، 5))   # 15
    اطبع_سطر(احسب(10، "/"، 0))   # خطأ!
امسك (خطأ)
    اطبع_سطر("❌ " + خطأ)
نهاية

ملخص الفصل

المفهومالصياغة
التقاط خطأحاول ... امسك (خ) ... نهاية
تنظيف مواردأخيراً ... نهاية
رمي خطأارمي "رسالة" أو ارمي كائن
خطأ مخصصصنف مع حقل رسالة

مُرخَّص بموجب رخصة MIT