الفصل 7: معالجة الأخطاء
ما ستتعلم في هذا الفصل
- ماهية الأخطاء وأنواعها
- استخدام
حاول/امسك/أخيراً - رمي أخطاء مخصصة باستخدام
ارمي - إنشاء أصناف أخطاء خاصة
- أنماط معالجة الأخطاء المهنية
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)) # خطأ!
امسك (خطأ)
اطبع_سطر("❌ " + خطأ)
نهايةملخص الفصل
| المفهوم | الصياغة |
|---|---|
| التقاط خطأ | حاول ... امسك (خ) ... نهاية |
| تنظيف موارد | أخيراً ... نهاية |
| رمي خطأ | ارمي "رسالة" أو ارمي كائن |
| خطأ مخصص | صنف مع حقل رسالة |