معالجة الأخطاء (Error Handling)
الأخطاء هي حقيقة واقعة في البرمجيات، لذا تمتلك Rust عدداً من الميزات للتعامل مع المواقف التي يحدث فيها خطأ ما. في كثير من الحالات، تطلب منك Rust الإقرار باحتمالية حدوث خطأ واتخاذ إجراء ما قبل أن يتم تجميع الكود الخاص بك. هذا المتطلب يجعل برنامجك أكثر قوة من خلال ضمان اكتشافك للأخطاء ومعالجتها بشكل مناسب قبل نشر الكود الخاص بك في بيئة الإنتاج!
تقسم Rust الأخطاء إلى فئتين رئيسيتين: أخطاء قابلة للاسترداد (Recoverable) وأخطاء غير قابلة للاسترداد (Unrecoverable). بالنسبة لـ “الخطأ القابل للاسترداد” (Recoverable Error)، مثل خطأ “الملف غير موجود”، فمن المرجح أننا نريد فقط إبلاغ المستخدم بالمشكلة وإعادة محاولة العملية. أما “الأخطاء غير القابلة للاسترداد” (Unrecoverable Errors) فهي دائماً أعراض لوجود أخطاء برمجية (Bugs)، مثل محاولة الوصول إلى موقع يتجاوز نهاية المصفوفة، ولذا نريد إيقاف البرنامج على الفور.
لا تفرق معظم اللغات بين هذين النوعين من الأخطاء وتتعامل مع كليهما بنفس الطريقة، باستخدام آليات مثل “الاستثناءات” (Exceptions). لا تمتلك Rust استثناءات؛ بدلاً من ذلك، لديها النوع Result<T, E> للأخطاء الـ Recoverable، وماكرو panic! الذي يوقف التنفيذ عندما يواجه البرنامج خطأ Unrecoverable. يغطي هذا الفصل استدعاء panic! أولاً ثم يتحدث عن إرجاع قيم Result<T, E>. بالإضافة إلى ذلك، سنستكشف الاعتبارات عند تحديد ما إذا كنت ستحاول الاسترداد من خطأ ما أو إيقاف التنفيذ.