معالجة الأخطاء في لغة JavaScript
يا هلا بالشباب، اليوم بنغوص في موضوع مهم جدًا لأي مبرمج جافاسكريبت: معالجة الأخطاء. صدقني، بدونها شغلك بيصير فوضى وبيتكسر بأي وقت. خلونا ندخل بالموضوع على طول.
ليش نحتاج معالجة الأخطاء؟
بكل بساطة، عشان برنامجك ما يوقف فجأة ويطلع لك وجه حزين للمستخدم. الأخطاء بتحصل، سواء كانت من المستخدم، الشبكة، أو حتى غلطة برمجية منك. مهمتنا إننا نتعامل معها بأناقة ونعطي المستخدم تجربة كويسة حتى لو صار خطأ.
الـ try...catch بلوك: صديقك الوفي
هذا هو الأساس يا جماعة. أي كود تتوقع إنه ممكن يرمي خطأ، حطه داخل الـ try بلوك. وإذا صار الخطأ، الـ catch بلوك بيمسك الخطأ وبيعالج الموضوع.
ملاحظة: الـ
catchبلوك يستقبل باراميتر (عادةً نسميهerrorأوerr) فيه تفاصيل الخطأ اللي صار. استفيد منه عشان تعرف وش المشكلة بالضبط.
شوف المثال:
الـ finally بلوك: دائمًا يتنفذ
الـ finally بلوك يتنفذ دائمًا، سواء صار خطأ أو ما صار. مفيد جدًا لو عندك موارد لازم تقفلها، أو تنظيف معين لازم تسويه، بغض النظر عن نتيجة الـ try بلوك.
رمي الأخطاء بنفسك (throw)
تقدر ترمي أخطاء بنفسك باستخدام الكلمة المفتاحية throw. هذا مفيد لما تكتشف إن فيه مشكلة معينة في منطق برنامجك وما تبغى الكود يكمل تنفيذ بشكل خاطئ.
يفضل دائمًا ترمي كائن Error أو كائن مشتق منه، لأنه بيعطيك معلومات مفيدة زي رسالة الخطأ ومسار التنفيذ (stack trace).
معالجة الأخطاء في العمليات غير المتزامنة (Asynchronous)
الأخطاء في الـ Promises والـ async/await لها طريقة خاصة في المعالجة. لا تحاول تستخدم try...catch عادي مع Promises بدون async/await، ما راح يشتغل صح.
مع الـ Promises (.catch())
الـ Promise له ميثود خاصة اسمها .catch() عشان تمسك الأخطاء اللي تصير فيه.
مع الـ async/await (try...catch)
هنا نقدر نرجع لـ try...catch اللي نعرفه، لأنه الـ await بيخلي الكود يتصرف كأنه متزامن.
أنواع الأخطاء الشائعة
فيه أنواع أخطاء بتشوفها كثير في جافاسكريبت، زي:
ReferenceError: لما تحاول تستخدم متغير ما تم تعريفه.TypeError: لما تسوي عملية على نوع بيانات غلط (مثلاً، تستدعي ميثود علىnull).SyntaxError: خطأ في كتابة الكود نفسه (ما راح يتنفذ أصلاً).RangeError: لما تكون قيمة خارج النطاق المسموح (مثلاً، مصفوفة بطول سالب).
نصائح من أخوك السعودي
- لا تبلع الأخطاء: لا تسوي
catchوتخلي الـcatchبلوك فاضي. هذا أسوأ شيء ممكن تسويه. لازم تسجل الخطأ أو تتعامل معه بطريقة صحيحة. - رسائل واضحة: لما ترمي خطأ أو تسجله، خلي الرسالة واضحة ومفيدة. بتشكر نفسك عليها بعدين لما تحاول تصلح المشكلة.
- لا تعرض الأخطاء الخام للمستخدم: المستخدم ما يهمه الـ
stack trace. اعرض له رسالة سهلة ومفهومة زي "حدث خطأ غير متوقع، الرجاء المحاولة مرة أخرى." - استخدم أدوات التسجيل (Logging): في بيئة الإنتاج، لا تعتمد على
console.errorوبس. استخدم مكتبات تسجيل احترافية ترسل الأخطاء لسيرفرات خاصة عشان تقدر تتابعها وتحللها. - فكر في السيناريوهات: قبل لا تكتب الكود، فكر وش ممكن يصير غلط؟ وكيف برنامجك بيتعامل مع هالشيء؟
وبكذا نكون غطينا أساسيات معالجة الأخطاء في جافاسكريبت. طبقوا اللي تعلمتوه، وصدقوني شغلكم بيصير أنظف وأقوى. بالتوفيق يا أبطال!