تقنيات جافا سكريبت المضادة للصمت للإشارة إلى الفشل
-
16-09-2020 - |
سؤال
ما يمكن أن يكون وسيلة جيدة للإبلاغ عن الأخطاء في جافا سكريبت بدلا من الاعتماد على نولز ، وغير محدد عند حدوث أخطاء وظيفة غير قادر على المضي قدما.يمكنني التفكير في ثلاث طرق:
- لا تفعل شيئا
- رمي استثناء
- تأكيد
في ما يلي مثال بسيط للسيناريو-وهي وظيفة تقيد حساب مستخدم بالمبلغ الذي تم تمريره.الوظيفة credit
هو جزء من Account
كائن.
وهنا الحل الساذج.
function credit(amount) {
this.balance += amount;
}
المشكلة الرئيسية في هذا النهج هي البيانات غير الصالحة.دعونا إصلاحه ، واستخدام قيمة الإرجاع للإشارة إلى أن العملية فشلت.
function credit(amount) {
if(!isInt(amount)) {
return false;
}
this.balance += amount;
}
يعد هذا تحسينا مقارنة بالسابق ، ولكن سيتعين على رمز العميل التحقق من قيمة الإرجاع للتأكد من نجاح العملية.القيام بذلك أساسا كل طريقة في النظام يمكن أن تصبح مرهقة.
if(!johnDoe.credit(100)) {
// do some error handling here
}
النهج الثالث ، على غرار النهج الثاني ، هو رمي استثناء.وبما أننا رمي استثناء أنفسنا, يمكن رمي نوع معين من استثناء بدلا من واحد عام.
function credit(amount) {
if(!isInt(amount)) {
throw new InvalidAmountError(amount);
}
this.balance += amount;
}
النهج الرابع مماثل لرمي الاستثناءات هو استخدام التأكيدات في التعليمات البرمجية الخاصة بك.أحد أوجه القصور مقارنة بالنهج أعلاه هو أنه نظرا لأن التأكيد عام ، فإننا نفقد القدرة على طرح استثناءات مخصصة.لا يزال من الممكن على الرغم من تمرير الكائن لرمي في كل دعوة تأكيد.
function credit(amount) {
assert(!isInt(amount), "Amount to credit is not an integer");
this.balance += amount;
}
عالمي assert
وظيفة سهلة الكتابة ويجعل رمز أقصر قليلا.
function assert(value, message) {
if(value !== true) {
throw new AssertionError(message);
}
}
function AssertionError(message) {
this.message = message;
}
AssertionError.prototype.toString = function() {
return 'AssertionError: ' + this.message;
}
للخروج من هذه النهج ، ما يمكن أن يكون وسيلة جيدة للتعامل مع القيم غير متوقعة ، ومسارات غير سعيدة.هل هناك أي طرق أخرى غير مذكورة هنا يمكن أن تكون مفيدة?
المحلول
ضع في اعتبارك إطار عمل تسجيل من جانب العميل للإبلاغ عن الأخطاء ، مثل لوغ4.يمكن للمرء تسجيل الرسائل (أي معلومات ، تصحيح ، تحذير ، خطأ) في المتصفح أو تستمر الرسائل إلى الخادم عبر أجاكس ، اعتمادا على التطبيق.
يوفر موقع لوغ4 جس أيضا قائمة أطر تسجيل جافا سكريبت الأخرى.
سيكون النهج الجيد ، باستخدام مثال الاستثناء المخصص ، هو رمي الاستثناء وتسجيل الخطأ كما تراه مناسبا.
نصائح أخرى
عيب واحد مقارنة بما سبق النهج هو أنه بما أن التأكيد هو عام ، نفقد القدرة على رمي استثناءات مخصصة
ليس بالضرورة:
function assert(value,message,Exctype) {
if(value !== true) throw new Exctype(message);
}
الصانعين هي وظائف.الوظائف هي قيم من الدرجة الأولى.لا تتردد في تمرير ' م حولها.