جافاسكربتمعالجة الأخطاء
- مفهوم معالجة الأخطاء
- أنواع الأخطاء البرمجية
- الجملتين try و catch
- الجملة finally
- الأمر throw
مفهوم معالجة الأخطاء
أثناء قيام مفسر الكود بتنفيذ الأوامر فإنه عند حدوث أي خطأ ( Error ) يتوقف عن تنفيذ الأوامر التالية الموجودة في السكربت و يظهر رسالة الخطأ في الكونسول.
معالجة الأخطاء ( Errors Handling ) يقصد بها كتابة الكود الذي قد يسبب أي مشكلة بشكل محمي بحيث أنها إذا حدثت فإن ذلك لن يؤدي إلى تعليق السكربت أو إيقاف تنفيذ باقي الأوامر الموجودة فيه.
في هذا الدرس ستتعلم، كيف تحمي الكود من أي أخطاء قد تحدث، كيف تعالج الأخطاء إن وقعت، و كيف تقوم بتعريف أخطاء جديدة.
في صفحات الويب يمكنك رؤية كل الأخطاء و رسائل التحذير التي تحصل على خلف الكواليس بالنقر على الزر F12 و من ثم التوجه للتبويب Console.
أنواع الأخطاء البرمجية
تنقسم الأخطاء البرمجية لثلاث أنواع رئيسية هي:
- أخطاء لغوية ( Syntax Errors ) و التي تحدث عن مخالفة مبادئ اللغة مثل أن يتم تعريف شيء بطريقة خاطئة.
- أخطاء تحدث أثناء التشغيل ( Runtime Errors ) و يقال لها إستثناءات ( Exceptions ) مما يؤدي إلى تعليقه و إيقافه بشكل غير طبيعي.
- أخطاء منطقية ( Logical Errors ) و يقصد منها أن الكود يعمل بدون أي مشاكل و لكن نتيجة تشغيل هذا الكود غير صحيحة.
الأخطاء الغير قابلة للمعالجة
في حال كان الكود يحتوي على أخطاء لغوية ( Syntax Errors ) فيجب إصلاحها كلها قبل تجربة الكود حتى يستطيع مفسر الكود أن ينفذ كل الأوامر الموجودة في السكربت، و إن لم تفعل ذلك فإنه عندما يحاول تنفيذ الأمر المكتوب بشكل خاطئ سيفشل و لن يتابع تنفيذ باقي الأوامر.
لا يمكنك حماية الكود من الأخطاء اللغوية بل يمكنك حمايته من الإستثناءات ( Exceptions ) التي قد تحدث وقت تنفيذ الكود.
الجملتين try و catch
بشكل عام، أي كود قد يسبب تنفيذه خطأ يجب وضعه بداخل حدود الجملة try.
أي خطأ يحدث في الجملة try يتم معالجته في حدود الجملة catch على النحو التالي.
الباراميتر error الموضوع في الجملة catch() يمثل كائن يحتوي على خصائص فيها معلومات حول الخطأ الذي حدث:
- error.name تعطينا إسم الخطأ الذي حدث.
- error.message تعطينا رسالة الخطأ الذي حدث، أي الشرح.
إسم الباراميتر error يمكنك وضع أي إسم آخر مكانه مثل err أو e أو غيره.
في المثال التالي قمنا بتعريف متغير قيمته عددية، و من ثم حاولنا تحويل قيمته لأحرف كبيرة و عرضها في الصفحة، الأمر الذي سيسبب خطأ.
ملاحظة: عند تجربة الكود فإنه لن يتنفذ و لن يظهر أي نتيجة في الصفحة و لكن لو فتحت الكونسول لظهر لك أنه يوجد خطأ.
المثال الأول
الخطأ الذي سيظهر في الكونسول:
سنقوم بإعادة المثال السابق مع وضع الأمر الذي سيسبب مشكلة بداخل جملة try.
بداخل الجملة catch سنعرض رسالة عادية تخبر المستخدم بأنه لا يمكن تحويل قيمة x.
المثال الثاني
نتيجة التشغيل:
This rest of code will be executed.
سنقوم بإعادة المثال السابق مع طباعة إسم و رسالة الخطأ الذي حدث في الجملة catch.
المثال الثالث
نتيجة التشغيل:
Error-message: x.toUpperCase is not a function.
The rest of code will be executed.
الجملة finally
الجملة finally بعد الجملتين try و catch كما يلي لتنفيذ كود معين بغض النظر ما إن تنفذ الكود السابق لها بنجاح أو حدث فيه خطأ.
في حال كان سيتم وضع الجمل الثلاثة معاً فسيكون شكل الكود كما يلي:
عند استخدام الجملة try فإنك مجبر على وضع الجملة catch أو الجملة finally أو كلاهما بعدها حتى لو كنت لا تريد معالجة الخطأ الذي قد يحصل فيها. إن لم تفعل ذلك فسيعتبر مفسر الكود أنه يوجد خطأ لغوي ( Syntax Error ).
في المثال التالي لاحظ كيف أنه سيتم تنفيذ الكود الموجود في الجملة finally سواء حدث خطأ أم لم يحدث في الجملة try.
مثال
نتيجة التشغيل:
Finally code is executed now.
The rest of code will be executed.
الأمر throw
يمكنك استخدام الأمر throw للتسبب بخطأ في الكود و أنت من يحدد نوع هذا الخطأ.
في المثال التالي إذا كانت قيمة المتغير x أصغر من صفر فإنه سيتم إعتبار أنه حدث خطأ إسمه 'x value cannot be negative'.
مثال
نتيجة التشغيل:
The rest of code will be executed.