سؤال

لنفترض أن لدي الرمز التالي:

public class MainClass {
    public static void main(String[] args) {
        System.out.println(sumNumbers(10, 10));
    }

    //@requires a >= 10;
    //@ensures \result < 0;
    public static int sumNumbers(int a, int b) {
        return a+b;
    }
}

يمكنني صنع شيئين هنا:

استخدم عقود الرمز (في هذه الحالة ، ما هو في التعليقات). عندما يتم تشغيل Sumnumbers و <10 ، سوف يلقي على الفور استثناء (على الرغم من أنه لا يبدو وصفيًا للغاية):

Exception in thread "main" org.jmlspecs.jmlrac.runtime.JMLInternalNormalPostconditionError: by method MainClass.sumNumbers
    at MainClass.sumNumbers(MainClass.java:500)
    at MainClass.internal$main(MainClass.java:9)
    at MainClass.main(MainClass.java:286)

أو...

رمي استثناء. يمكن أن يكون الاستثناء وصفيًا كما أريد. سأقوم أيضًا بالتحقق من نهاية الوظيفة لمعرفة كلما كانت شروط النشر صحيحة أم لا.

ما الذي ستستخدمه هنا ولماذا؟

هل كانت مفيدة؟

المحلول

يعجبني فكرة عقود الكود ، لكن الوصفية IllegalArgumentException (أو ما شابه) نصائح بالنسبة لي. إنه أكثر وضوحًا في دور الدعم/الإنتاج (أو حتى التطوير) للحصول على رسالة استثناء صريحة ، والتي تمنحك بدءًا من التشخيص على ما يحدث (سواء كان نظامًا مكسورًا ، أو إذا كنت أسيء استخدام واجهة برمجة التطبيقات أثناء التطوير ).

نصائح أخرى

هل تتوقع أن يتم تمرير المدخلات غير الصالحة إلى هذه الوسيطة أثناء التشغيل العادي لبرنامجك؟ إذا كانوا ، هل يمكنك التعافي منه؟

إذا كان الأمر كذلك ، فإن الاستثناءات التي تم فحصها هي الطريق للذهاب.

إذا لم تتمكن من التعافي من هذا النوع من الحالات ، فعندئذٍ ، اجعله عقدًا ويفشل بصوت عالٍ - لكن في كلتا الحالتين ، سأستخدم رسالة خطأ وصفية.

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