سؤال

أعطني بعض من أفكارك التي هي أفضل الترميز الممارسة/يجعل أكثر كفاءة الكود/تبدو أجمل/أيا كان:زيادة وتحسين قدرتك على استخدام عبارات إذا توقع وقبض المحتملة مشاكل ؟ أو ببساطة جعل الاستخدام الجيد حاول/catch بشكل عام ؟

دعنا نقول هذا هو جافا (إذا كان يهم).

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

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

نصائح أخرى

if كتل قليلا أسرع ؛ إذا كنت لن تحتاج إلى اثني عشر منهم, أنهم أفضل من فكرة try/catches.الاستثناءات يجب أن تكون استثنائية ، وليس في كل مرة يتم تشغيل التعليمات البرمجية.يمكنني استخدام الاستثناءات الأحداث النادرة مثل الخادم قطع الخدمات (على الرغم من أنها تحدث مرات قليلة كل يوم) ، if كتل لأي من السيطرة عليها المتغيرات.

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

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

أعتقد إن البيانات بشكل أفضل.لا يمكنك أن تحيط كل سطر من التعليمات البرمجية مع try..catch (حسنا يمكنك ولكن يجب أن لا تفعل ذلك).يمكنك تحيط كتلة من التعليمات البرمجية مع محاولة الصيد ولكن ليس كل سطر.

والاستثناءات إبطاء الأمور.

بلدي 2p:استخدام try/catch هو أفضل:

  • فإنه يجعل من الواضح تماما أن البعض المبرمجون أن تقوم به معالجة الاستثناء
  • المترجم يفهم ما تقومون به و يمكن أن تؤدي أنسب وقت التحويل البرمجي الشيكات لك

في تجربتي, باستخدام if-المشروطة-المنطق يجعل من الصعب التمييز بين الخطأ التعامل من منطق الأعمال.

من ما قيل لي من قبل أكثر المطورين ذوي الخبرة والمحللين ، حاول/catch أكثر وجوه المنحى وإذا هو أكثر إجرائية.

أنا شخصيا لا أهتم.

أنا على بينة من حقيقة أن حاول/catch أبطأ ويسبب الأداء ضرب ، ولكن إذا أنا ذاهب إلى استخدام عشرات ifs إلى التحقق من صحة قبل أن أفعل ما أريد أن أفعله أنا دائما استخدام try/catch لانقاذ على عدد من الأسطر من التعليمات البرمجية.

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

في بعض الأحيان, من الواضح أنني أرفق بعض إذا كانت البيانات في محاولة/الصيد, ولكن على أي حال.

يمكنني استخدام إذا عندما يكون هناك فقط عدد قليل من الأشياء للتحقق من صحة (1 أو 2) قبل أن أفعل ما يجب أن أفعل.

هناك شيء واحد التي لم يتم ذكرها هنا.

مع if-else في كل مرة يتم تشغيل التعليمات البرمجية على الأقل 1 من هذا الشرط هو ضمان أن يتم تقييم تنفيذها.أنا متأكد من أننا جميعا نعرف كيف إذا كان آخر السيف يعمل ، ولكن أن تكون واضحة...على إذا جزء من بيان سوف يكون دائما تقييم لو كان كاذبا ثم التالي آخر-إذا يتم تقييم ، وهكذا دواليك حتى فقط آخر ترك تقييم.

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

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

أيضا, فإنه ليس من الصيد الذي يسبب الأداء ضرب ، ولكن رمي.

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

اصطياد الاستثناءات ضرورية إذا كنت تعرف ما يجب القيام به معهم.إذا كان لديك أي طريقة التعامل مع صحيح الاستثناء ثم يجب أن ندعه يذهب بعض التعليمات البرمجية في أعلى السلسلة قد يكون أفضل طريقة للتعامل مع ذلك.

أنها عادة ما تكون فكرة جيدة أن يكون استثناء يدوي في المطلق أعلى مستوى من التطبيق الخاص بك للقبض على استثناءات قبل أن ينظر إليها من قبل المستخدم.في ASP.NET يمكنك القيام بذلك في Application_Error الحدث العالمي.asax.في لغات أخرى/بيئات يمكنك أن تفعل ذلك في حلقة الرئيسية الخاصة بك ، أيا كان ذلك قد يكون.

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

@PersonalPerson - آسف, ولكن هذا هو مجرد كسول الترميز.بدلا من استخدام المحاولة-catch لأن هناك الكثير من البيانات إذا ، لماذا لا ريفاكتور التعليمات البرمجية الخاصة بك (أي ، وضع الخاص بك التحقق من صحة المنطق في طريقة).هذا وسوف تبقي رمز أنظف و أكثر قابلية للقراءة و الحفاظ على أفضل الممارسات في الأداء.

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

أقسم أنني عملت مع التعليمات البرمجية الخاصة بك من قبل ، وجعلت رأسي يؤلمني.

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

اسمحوا المقبل تخيل أن كنت تستخدم أي مكتبة خارجي/حزمة انها قررت وضع في له/لها قانون تعسفي آخر طريقة التعامل مع الخطأ الدول - فإنه قوة لكم لضبط طريقة التعامل مع ذلك - على سبيل المثال سوف تحتاج إلى التحقق من إذا طرق معينة إرجاع true أو false أو أيا كان.

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

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