سؤال
لديك سلسلة من الوظائف للتنفيذ. الحالة أ: لا يعتمدون على بعضهم البعض. أي من هذه أفضل؟
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 يبدو ببساطة منفرج بالنسبة لي.
الحالة أ: الخيار الأول
الحالة ب: الخيار الثاني