سؤال

أرغب في الحصول على نوع من آلية FAIL FAST على مستوى المشروع (ربما أ RuntimeException) لأي رمز يسبب تعيين NaN.

في مشروعي NaN ليست قيمة صالحة أبدًا.

أدرك أنه يمكنني إضافة تأكيدات (باستخدام إينان) أو اختبارات أخرى طوال الوقت ولكني أريد أن أعرف ما إذا كانت هناك طريقة أكثر أناقة.

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

المحلول

نعم ، يمكنك استخدام SideSJ (البرمجة الموجهة للدعم) لرمي خطأ كلما تم تعيين قيمة على NAN.

في الأساس ، تريد الاعتراض كلما تم تعيين قيمة ، وتنفيذ بعض الوظائف الأخرى.

لقد فعلنا أشياء مماثلة في قاعدة الشفرة الخاصة بنا ... لكن لا يمكنني تقديم الكثير من المساعدة خارج ذلك.

نصائح أخرى

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

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

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

لا أدرك أن أي شخص كتب مثل هذا الوكيل. إذا كنت تبحث عن رصاصة فضية ، فلا أعتقد أن هناك واحدة.

مجرد نهج آخر - يمكنك دمج مدققات التعليمات البرمجية مثل PMD في عملية الإنشاء الخاصة بك وإنشاء قاعدة تقارير كل مهمة Double.NaN.

لن يكون ذلك مثاليًا ، لأنه لا يمكن أن يحصل على نان ستحصل عليه من الخارج (قاعدة البيانات أو الاتصالات) أو أن شخصًا ما يخلق من خلال معالجة بت ولكن على الأقل يمكنك التأكد من ذلك Double.NaN لا يمكن تعيينه إلى متغير أو استخدامه كمعلمة طريقة أو داخل التقييم.

قد يكون تحديد القواعد أمرًا صعبًا - ولكن على الأقل - إنه نهج آخر. يمكن أن تمنع أبسط قاعدة Double.NaN على الاطلاق.

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