الدرس الخامس عشر: التعامل مع الأخطاء (Error Handling) في JavaScript
مقدمة عن التعامل مع الأخطاء
التعامل مع الأخطاء في JavaScript هو جزء أساسي من كتابة الكود الجيد والمستقر. الأخطاء قد تحدث نتيجة أسباب متعددة، مثل إدخال المستخدم بيانات غير صحيحة، مشاكل في الشبكة، أو أخطاء برمجية. لذلك، يوفر JavaScript أدوات قوية لإدارة الأخطاء بطريقة منظمة وفعالة.
أدوات إدارة الأخطاء في JavaScript
1. استخدام try
, catch
, و finally
ما هي؟
try
: يحتوي على الكود الذي قد يُسبب خطأ.catch
: يحتوي على الكود الذي يتم تنفيذه إذا حدث خطأ.finally
: يحتوي على الكود الذي يتم تنفيذه دائمًا، سواء حدث خطأ أو لم يحدث.
الصيغة العامة:
try {
// الكود الذي قد يُسبب خطأ
} catch (error) {
// التعامل مع الخطأ
} finally {
// الكود الذي يتم تنفيذه دائمًا
}
مثال عملي:
try {
let x = 10 / 0; // قد يُسبب خطأ
console.log("Result:", x);
} catch (error) {
console.error("An error occurred:", error.message);
} finally {
console.log("This block is always executed.");
}
الإخراج:
Result: Infinity
This block is always executed.
2. التعامل مع الأخطاء المخصصة باستخدام throw
ما هو؟
throw
يُستخدم لإنشاء أخطاء مخصصة يمكن التعامل معها باستخدام catch
.
مثال عملي:
function divide(a, b) {
if (b === 0) {
throw new Error("Division by zero is not allowed.");
}
return a / b;
}
try {
console.log(divide(10, 0));
} catch (error) {
console.error("Error:", error.message);
}
الإخراج:
Error: Division by zero is not allowed.
إضافة أخطاء مخصصة بناءً على الشروط:
function validateAge(age) {
if (age < 0) {
throw new Error("Age cannot be negative.");
} else if (age < 18) {
throw new Error("You must be at least 18 years old.");
}
return "Valid age.";
}
try {
console.log(validateAge(15));
} catch (error) {
console.error("Validation Error:", error.message);
}
3. أنواع الأخطاء في JavaScript
أخطاء الجافاسكريبت تنقسم إلى عدة أنواع، منها:
- SyntaxError (خطأ في الصياغة):
- يحدث عند كتابة كود غير صحيح من حيث بناء الجملة.
- مثال:
try { eval("let x = ;"); // كود غير صحيح } catch (error) { console.error("Syntax Error:", error.message); }
- ReferenceError (خطأ مرجعي):
- يحدث عند محاولة الوصول إلى متغير أو دالة غير معرّفة.
- مثال:
try { console.log(undeclaredVariable); // متغير غير معرّف } catch (error) { console.error("Reference Error:", error.message); }
- TypeError (خطأ في النوع):
- يحدث عند محاولة تنفيذ عملية غير صالحة على نوع بيانات معين.
- مثال:
try { let x = null; x.toString(); // لا يمكن استدعاء toString على null } catch (error) { console.error("Type Error:", error.message); }
- RangeError (خطأ في النطاق):
- يحدث عند استخدام قيمة خارج النطاق المسموح به.
- مثال:
try { let num = Number.MAX_SAFE_INTEGER; console.log(num.toPrecision(500)); // يتجاوز النطاق } catch (error) { console.error("Range Error:", error.message); }
- EvalError:
- يتعلق بالأخطاء الناتجة عن استخدام دالة
eval
. نادر الاستخدام في التطبيقات الحديثة.
- يتعلق بالأخطاء الناتجة عن استخدام دالة
- URIError:
- يحدث عند توفير سلسلة غير صحيحة لدوال معالجة URI، مثل
decodeURIComponent
.
- يحدث عند توفير سلسلة غير صحيحة لدوال معالجة URI، مثل
أفضل الممارسات في إدارة الأخطاء
1. فهم الأخطاء والتعامل معها بوضوح
استخدم رسائل واضحة عند إنشاء أخطاء مخصصة:
function calculateSquareRoot(number) {
if (number < 0) {
throw new Error("Cannot calculate the square root of a negative number.");
}
return Math.sqrt(number);
}
2. عدم إسكات الأخطاء بدون سبب
لا تترك كتلة catch
فارغة:
try {
// كود قد يسبب خطأ
} catch (error) {
console.error("Unexpected error:", error.message);
}
3. تسجيل الأخطاء لمراجعتها لاحقًا
استخدم أدوات مثل console.error
أو أنظمة تسجيل خارجية لمراقبة الأخطاء.
4. استخدام finally
بحكمة
لضمان تنظيف الموارد مثل إغلاق ملفات أو اتصالات:
try {
// فتح اتصال
} catch (error) {
// التعامل مع الأخطاء
} finally {
// إغلاق الاتصال
}
الخاتمة
إدارة الأخطاء أمر ضروري لكتابة تطبيقات مستقرة وقابلة للصيانة. من خلال استخدام الأدوات المناسبة مثل try-catch
و throw
، يمكنك التأكد من أن تطبيقك يتعامل مع الأخطاء بشكل صحيح دون تعطل. تذكر أن الهدف من إدارة الأخطاء هو تحسين تجربة المستخدم والتقليل من الأعطال المفاجئة.
اكتشاف المزيد من كود التطور
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.