سؤال

ما يمكن أن يكون وسيلة جيدة للإبلاغ عن الأخطاء في جافا سكريبت بدلا من الاعتماد على نولز ، وغير محدد عند حدوث أخطاء وظيفة غير قادر على المضي قدما.يمكنني التفكير في ثلاث طرق:

  1. لا تفعل شيئا
  2. رمي استثناء
  3. تأكيد

في ما يلي مثال بسيط للسيناريو-وهي وظيفة تقيد حساب مستخدم بالمبلغ الذي تم تمريره.الوظيفة 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);
}

الصانعين هي وظائف.الوظائف هي قيم من الدرجة الأولى.لا تتردد في تمرير ' م حولها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top