هل هو ممارسة سيئة للعودة من داخل الصيد محاولة عرقلة أخيرا؟

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

  •  19-08-2019
  •  | 
  •  

سؤال

وهكذا جئت عبر بعض رمز هذا الصباح يشبه هذا:

try
{
    x = SomeThingDangerous();
    return x;
}
catch (Exception ex)
{
    throw new DangerousException(ex);
}
finally
{
    CleanUpDangerousStuff();
}

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

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

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

المحلول

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

نصائح أخرى

ووسيتم تنفيذها في نهاية المطاف مهما كانت، لذلك لا يهم.

وشخصيا، أود أن تجنب هذا النوع من الترميز وأنا لا أشعر رؤية بيانات المرسل قبل البيانات أخيرا.

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

وهكذا، وأود أن ترتيب التعليمات البرمجية بحيث البيان عودة تظهر دائما بعد التصريحات أخيرا.

وهذا قد أجيب على سؤالك

حقيقة ما يحدث في محاولة {عودة س. } وأخيرا {س = فارغة؛ } البيان؟

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

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

وظيفيا ليس هناك فرق.

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

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

والسؤال الحقيقي هو الاسلوب الذي هو أفضل. أحب أن أكتب أساليبي حتى لا يكون هناك بيان عودة واحد فقط، وبهذه الطريقة فإنه من السهل أن نرى تدفق للخروج من طريقة، ويترتب على ذلك أود أيضا أن وضع بيان عودة آخر لذلك فمن السهل أن نرى أنه من في نهاية الأسلوب وهذا ما يعود عليه.

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

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