معالجة الأخطاء
منقول من الكتاب المرجعي: docs/handbook/language/13-errors.md · الإيداع 7a52f6c
القاعدة (منذ 0.7.0). دالة قد تفشل تكتب ! قبل نوع إرجاعها (!عدد، !نص، !فراغ)، وترجع ارجع خطأ.اسم عند الفشل.
القيمة !ن لا تُستعمل كأنها ن: تُعالَج في موضعها، وإلا فخطأ ترجمة يقول ما يُكتب. القرار كاملاً في
errors-design.md (وثيقة في مستودع المجمّع)، والترحيل في الترحيل إلى معالجة الأخطاء (0.7.0).
| الصيغة | ما تفعله |
|---|---|
جرّب تعبير |
الناتج الناجح؛ وعند الفشل تخرج الدالة الحالية بالخطأ نفسه (وتُنفَّذ خاتماتها). في المستوى الأعلى: «خطأ لم يُعالَج» برمز 3 |
تعبير والا قيمة |
الناتج، أو القيمة عند الفشل (تُقيَّم عند الفشل وحده) |
تعبير والا خ: ثم كتلة |
الخطأ في خ؛ وآخر سطر في كل مسار هو قيمة البديل، أو ارجع/توقف/تجاوز |
حالات خ: وحاله خطأ.اسم: |
معالجة كل خطأ بطريقته؛ وحاله _ لما بقي |
خاتمه_عند_خطأ جملة |
كـخاتمه، ولا تُنفَّذ إلا إن خرجت الدالة بخطأ؛ في مكدس واحد معها بعكس ترتيب الإعلان |
اخطاء: ثم أسماء |
أخطاء البرنامج، فوق المجموعة القياسية (غير_موجود ممنوع موجود ليس_ملفا ليس_مجلدا ليس_نصا كبير_جدا صيغة_خاطئة خارج_المدى لا_ذاكرة فشل_النظام) |
اطبع(خ) ونص(خ) |
اسم الخطأ |
اخطاء: رصيد_غير_كاف
داله اسحب(رصيد عدد, مبلغ عدد) !عدد: اذا مبلغ > رصيد: ارجع خطأ.رصيد_غير_كاف ارجع رصيد - مبلغ
داله سحبان(رصيد عدد, مبلغ عدد) !عدد: خاتمه_عند_خطأ اطبع("أُلغيت العملية") بعد_الاول = جرّب اسحب(رصيد, مبلغ) ارجع جرّب اسحب(بعد_الاول, مبلغ)
اطبع(سحبان(100, 30) والا -1)باقي = سحبان(50, 30) والا خ: حالات خ: حاله خطأ.رصيد_غير_كاف: اطبع("الرصيد لا يكفي") 0 حاله _: اطبع("خطأ آخر: ", خ) -1اطبع(باقي)ن = عدد("٤٢") والا 0اطبع(ن + 1, " ", عدد("س") والا -1)تبقى أخطاء تشغيل (أخطاء برمجة، رمز 3، لا تُعالَج): الفهرس خارج الحدود، والقسمة على صفر، والتجاوز، والمفتاح الغائب، وامتلاء
المكدس، وعدد(كسر) خارج المدى، وما يكشفه الكاشف، ونفاد الذاكرة إلا في حاول_احجز. وخطأ التشغيل لا ينفّذ خاتمه
ولا خاتمه_عند_خطأ (كـpanic في Zig): البرنامج ينتهي فوراً، فالملف المؤقت الذي كانت خاتمه ستحذفه يبقى على القرص
(memory-safety.md (وثيقة في مستودع المجمّع)، القسم 5). التنظيف الذي يجب أن يقع يلزمه خطأ متوقع (!ن) لا خطأ برمجة.
القيود المعروفة. !ن لا تُخزَّن في متغير ولا تُمرَّر؛ التوقيع لا يذكر أي الأخطاء ترجع الدالة؛ ولا بيانات مع الخطأ (اسم
فقط)؛ ومؤشر دالة ترجع !ن غير مدعوم.
أخطاء محتملة.
داله نصف(ن نص) !عدد: ارجع جرّب عدد(ن) / 2س = نصف("8")رمز الخروج: 2
في فهرس الأخطاء: E0399
داله ف() !عدد: ارجع 1ك = ف() والا خ: اطبع("فشل")رمز الخروج: 2
في فهرس الأخطاء: E0204