تخطَّ إلى المحتوى

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

كنوز توفر آليات متعددة لمعالجة الأخطاء: جرب/التقط/أخيرا وألق ونوع نتيجة.

جرب {
اطبع("داخل كتلة جرب")
اطبع("تنفيذ طبيعي")
} أخيرا {
اطبع("تنفيذ أخيرا دائماً")
}
جرب {
اطبع("قبل رمي الخطأ")
ألق "خطأ تجريبي!"
اطبع("لن يُطبع هذا")
} التقط خ {
اطبع("تم التقاط الخطأ!")
}
جرب {
اطبع("محاولة عملية خطرة")
ألق "فشل العملية"
} التقط خ_العملية {
اطبع("معالجة الخطأ")
} أخيرا {
اطبع("تنظيف الموارد")
}
ألق "رسالة الخطأ"
جرب {
اطبع("الكتلة الخارجية")
جرب {
اطبع("الكتلة الداخلية")
ألق "خطأ داخلي"
} التقط خ_داخلي {
اطبع("معالجة الخطأ الداخلي")
}
اطبع("استمرار الكتلة الخارجية")
} التقط خ_خارجي {
اطبع("معالجة الخطأ الخارجي")
} أخيرا {
اطبع("تنظيف")
}

طريقة أنيقة للتعامل مع العمليات التي قد تفشل:

دالة قسمة(أ: صحيح, ب: صحيح) -> اختياري<صحيح> {
إذا ب == 0 {
أرجع عدم
}
أرجع بعض(أ / ب)
}
// الاستخدام
دع ن1 = قسمة(20, 4) // بعض(5)
دع ن2 = قسمة(10, 0) // عدم

للقيم التي قد تكون غير موجودة:

دالة اقسم(أ: صحيح, ب: صحيح) -> اختياري<صحيح> {
إذا ب == 0 {
أرجع عدم
}
أرجع بعض(أ / ب)
}
// الاستخدام
دع ن = اقسم(10, 2)
// التحقق من الوجود
إذا ن.يوجد() {
اطبع("النتيجة موجودة")
}
// دالة قسمة مع نتيجة
دالة قسمة(أ: صحيح, ب: صحيح) -> اختياري<صحيح> {
إذا ب == 0 {
أرجع عدم
}
أرجع بعض(أ / ب)
}
// دالة تحقق العمر
دالة تحقق_عمر(عمر: صحيح) -> منطقي {
إذا عمر < 0 {
أرجع خطأ
} وإلا إذا عمر > 150 {
أرجع خطأ
}
أرجع صح
}
دالة رئيسية() {
اطبع("=== معالجة الأخطاء ===")
// جرب/أخيرا
اطبع("=== جرب/أخيرا ===")
جرب {
اطبع("تنفيذ طبيعي")
} أخيرا {
اطبع("أخيرا دائماً")
}
// جرب/التقط
اطبع("=== جرب/التقط ===")
جرب {
ألق "خطأ تجريبي"
} التقط خ {
اطبع("تم التقاط الخطأ")
}
// جرب/التقط/أخيرا
اطبع("=== جرب/التقط/أخيرا ===")
جرب {
ألق "فشل"
} التقط خ {
اطبع("معالجة")
} أخيرا {
اطبع("تنظيف")
}
// نوع النتيجة
اطبع("=== نوع النتيجة ===")
دع ن1 = قسمة(20, 4)
دع ن2 = قسمة(10, 0)
// التحقق من العمر
اطبع("=== التحقق من العمر ===")
دع ت1 = تحقق_عمر(25)
دع ت2 = تحقق_عمر(-5)
إذا ت1 {
اطبع("العمر 25 صالح")
}
إذا !ت2 {
اطبع("العمر -5 غير صالح")
}
اطبع("=== انتهى الاختبار ===")
}