معالجة الأخطاء (Error Handling): كيف تجعل نظامك "مضاداً للكسر"
أهلاً بالشباب! اليوم بنتكلم عن موضوع مهم جداً لأي مبرمج يبي شغله يكون "مضاد للكسر": معالجة الأخطاء (Error Handling).
معالجة الأخطاء: وش هي بالضبط؟
معالجة الأخطاء ببساطة هي طريقة تعاملك مع المشاكل اللي ممكن تصير في برنامجك. مو كل شي بيمشي تمام طول الوقت، السيرفر ممكن يطيح، اتصال النت ممكن ينقطع، المستخدم ممكن يدخل بيانات غلط. شغلك كمبرمج سعودي محترف مو بس تكتب الكود الصح، بل كمان تعرف كيف تتعامل مع الأخطاء عشان لا يتوقف النظام ويخرب على المستخدم.
تذكر: البرنامج اللي ما يخرب أبداً هو حلم، لكن البرنامج اللي يعرف يتعامل مع خرابه هو الواقع اللي لازم نسعى له.
ليش Error Handling مهم؟
- استقرار النظام: يخلي برنامجك ما يطيح فجأة ويوقف عن العمل.
- تجربة المستخدم: بدال ما يشوف المستخدم صفحة بيضاء أو رسالة خطأ غريبة، يشوف رسالة واضحة يقدر يفهمها.
- سهولة الصيانة: لما تصير مشكلة، اللوقات (logs) اللي تسجلها بتساعدك تعرف وين المشكلة بالضبط.
- الأمان: بعض الأخطاء ممكن تكشف معلومات حساسة للمخترقين. معالجتها صح يحميك.
أنواع الأخطاء اللي ممكن تواجهك
- Syntax Errors: أخطاء في كتابة الكود نفسه، زي نسيان فاصلة منقوطة
;أو قوس. هذي غالباً تكتشفها قبل ما تشغل الكود. - Runtime Errors: أخطاء تصير والبرنامج شغال، زي محاولة القسمة على صفر، أو محاولة فتح ملف مو موجود. هذي اللي نحتاج
Error Handlingعشانها. - Logical Errors: الكود يشتغل صح، لكن النتيجة غلط! زي مثلاً معادلة حسابية فيها خطأ. هذي أصعب شي تكتشفه لأن ما فيه خطأ تقني، بس النتيجة غير متوقعة.
كيف تسوي Error Handling صح؟ (الاستراتيجيات)
Try-CatchBlocks: هذي أشهر طريقة. تحط الكود اللي تتوقع ممكن يسوي مشكلة داخلtry، وإذا صار خطأ، الكود اللي داخلcatchبيشتغل عشان يتعامل معاه.
مثال (بشكل عام، ممكن يختلف باختلاف اللغة):try { // الكود اللي ممكن يسوي مشكلة const result = divide(10, 0); console.log(result); } catch (error) { // هنا تتعامل مع المشكلة console.error("حدث خطأ:", error.message); // ممكن تعرض رسالة للمستخدم، أو تسجل الخطأ في ملف } finally { // هذا الجزء يشتغل دائماً، سواء صار خطأ أو لا console.log("انتهت عملية المحاولة."); }- التحقق من المدخلات (Input Validation): قبل ما تستخدم أي بيانات جاية من المستخدم أو من أي مصدر خارجي، تأكد إنها صحيحة وبالتنسيق اللي تبيه.
مثال:function processUserData(data) { if (!data || typeof data.name !== 'string' || data.name.trim() === '') { throw new Error("اسم المستخدم غير صالح."); } // كمل معالجة البيانات } - التسجيل (Logging): سجل كل الأخطاء اللي تصير في ملفات خاصة (logs). هذي بتنقذك لما تحتاج تعرف وش صار بالضبط. استخدم مستويات مختلفة للتسجيل (INFO, WARN, ERROR, DEBUG).
- التعامل اللطيف مع الأخطاء (Graceful Degradation): إذا ما قدرت تسوي وظيفة معينة بسبب خطأ، حاول تقدم بديل أو نسخة أبسط من الوظيفة بدال ما تكسر النظام كله.
- الأخطاء المخصصة (Custom Error Classes): في الأنظمة الكبيرة، ممكن تسوي أنواع أخطاء خاصة فيك عشان تكون أكثر تحديداً. مثلاً
DatabaseConnectionErrorأوInvalidInputError.
نصائح ذهبية من أخوك المبرمج
- لا تخفي الأخطاء: لا تخلي الأخطاء تمر بصمت. لازم تتسجل أو يتم التعامل معها.
- رسائل خطأ واضحة: لا تكتب "حدث خطأ ما". اكتب "تعذر الاتصال بقاعدة البيانات، يرجى المحاولة لاحقاً."
- لا تكثر من
try-catch: استخدمها للمناطق اللي فعلاً تتوقع فيها مشاكل. الاستخدام المفرط ممكن يصعب قراءة الكود. - اختبر مسارات الأخطاء: مو بس تختبر الكود إذا مشي صح، اختبره إذا صار فيه أخطاء!
- افصل معالجة الأخطاء: حاول تخلي لوجيك معالجة الأخطاء في مكان منفصل أو وظائف خاصة.
ختاماً، معالجة الأخطاء مو مجرد "ميزة" إضافية، هي جزء أساسي من أي نظام قوي وموثوق. استثمر وقتك فيها عشان تبني أنظمة "مضادة للكسر".