سؤال

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

انظر أدناه:

bool b;

public bool ifelse(int i)
{
if(i == 5)
{
b = true;
}

else
{
b = false;
}
return b;
}
هل كانت مفيدة؟

المحلول

نعم هذا هو اسلوب جيد.

البديل (الذي سيكون سيئة) أن تفعل هذا:


public bool ifelse(int i) 
{ 
    if(i == 5) 
    { 
        return true; 
    }
    else 
    { 
        return false; 
    }
}

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

هذا ليس دائما القضية كما هو الحال مع كل الأسلوبية نقطة في البرمجة هناك جوانب جيدة و سيئة الجانبين.

نصائح أخرى

وماذا عن

return i == 5;

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

وتسير وفقا ما كنت اقترح، المثال الخاص بك سيكون أقصر وأبسط:

public bool ifelse(int i)
{
if(i == 5)
{
return true
}
return false
}

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

public bool ifelse(int i)
{
  bool b;
  /*
  Some code to calculate b
  */
  return b;
}

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

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

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

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

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