لماذا تفشل بسرعة على غرار برامج أقصر من أسلوب دفاعي البرامج ؟

StackOverflow https://stackoverflow.com/questions/3093181

سؤال

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

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

المحلول

تفشل بسرعة البرامج ليست بالضرورة أقصر من أسلوب دفاعي البرامج:ذلك يعتمد على تنفيذ التدابير اللازمة لجعل الخاص بك دفاعية رمز آمنة.

في حالة إرلانج ، تفشل بسرعة البرامج عادة ما تكون أقصر بسبب النمط التعريفي وكيف VM يجعل من المؤكد أن تولد خطأ الحالات بالنسبة لك.كمثال, في وظيفة:

day(1) -> sunday;
day(2) -> monday;
day(3) -> tuesday;
day(4) -> wednesday;
day(5) -> thursday;
day(6) -> friday;
day(7) -> saturday;

أي قيمة غير متوقعة تمريرها إلى وظيفة سيؤدي إلى خطأ يمكن أن تكون اشتعلت التعامل معها من قبل عملية أخرى (أي.:المشرف).مثل هذه الأخطاء أيضا لم تهدد النظام ككل و لا تتطلب رمز تضاف إلى وظيفة نفسها-انها فعلت كل ما في خارج التنفيذ العادي مسار محدد سلفا السلوكيات.

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

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

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

نصائح أخرى

انظر المادتين 4.3 و 4.4 من جو أرمسترونغ فرضية.

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

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

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