سؤال

لديك سلسلة من الوظائف للتنفيذ. الحالة أ: لا يعتمدون على بعضهم البعض. أي من هذه أفضل؟

function main() {
  a();
  b();
  c();
}

أو

function main() {
  a();
}

function a() {
  ...
  b();
}

function b() {
  ...
  c();
}

الحالة ب: يعتمدون على الانتهاء بنجاح من السابق.

function main() {
  if (a())
    if (b())
      c();
}

أو

function main() {
  if (!a()) return false;
  if (!b()) return false;
  c();
}

أو

function main() {
  a();
}

function a() {
  ... // maybe return false
  b();
}

function b() {
  ... // maybe return false
  c();
}

أفضل ، بطبيعة الحال ، يعني أكثر قابلية للصيانة وأسهل للمتابعة.

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

المحلول

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

الحالة ب: لا شيء مما سبق.

function main() {
    return a() && b() && c();
}

المنطق: يبدو أنك لا تهتم حقًا بقيمة الإرجاع ، فأنت تريد فقط الخروج مبكرًا إذا كانت إحدى الوظائف تُرجع قيمة معينة. يمكنك إرجاع النتيجة "anded" لجميع هذه الوظائف ، وإذا كانت أي من هذه الإرجاع خاطئة ، فسوف يندلع الرمز مبكرًا. لذلك ، إذا كان هناك عودة خاطئة ، فلن يتم تنفيذ B. من السهل قراءة وضع كل منهم على سطر واحد ويظهر بإيجاز أنهم يعتمدون على بعضهم البعض.

نصائح أخرى

الحالة أ: الخيار الأول

إذا كنت تستخدم الخيار الثاني ، فستجعل من الصعب إعادة استخدام A لأنك تسحب B و C تلقائيًا.

الحالة ب: تعتمد - هل تعود A و B و C إلى القيم المنطقية بشكل طبيعي ، أو بعض القيمة الأخرى للتحقق؟ ما زلت لا أحصل على مكالمة B و B Call C ، لأنه بعد ذلك تقدم تبعية غير ضرورية. إذا كانت قيم الإرجاع منطقية ، فأنا أميل نحو الخيار 2 - أقل تعشيشًا أمرًا جيدًا.

أولاً ، تعتمد أفضل إجابة على جوانب متعددة على السياق الذي يوجد فيه الرمز - لا أحد حقا الإجابة بخلاف "ذلك يعتمد".

ومع ذلك ، أخذ القيمة الاسمية ، الحالة أ:

يوضح الخيار 1 عرض المستوى الأعلى للخوارزمية.

الخيار 2 يخفي هذا ، يتم إخفاء المكالمات إلى B&C. يمكن أن يكون الكثير من العمل لاكتشاف C تم استدعاؤه. أيضًا ، من الصعب اختبار A&B في عزلة إذا كانوا يطلقون المزيد من الطرق. يمكن دائمًا اختبار Main إذا كان يمكن السخرية من A و B و C.

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

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

الخيار 3 يبدو ببساطة منفرج بالنسبة لي.

الحالة أ: الخيار الأول

الحالة ب: الخيار الثاني

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