سؤال

لا ينق و تعبيرات لامدا تقليل cyclomatic-التعقيد ؟ مجرد فضول لأن CodeRush يظهر في الواقع انخفاض في cc عندما مقابل محلل يزيد عليه.

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

المحلول

وأظن أن هذا التباين قد يكون راجعا إلى تنفيذ المؤجلة. عند استخدام LINQ مع تعبيرات لامدا، كنت تحديد كود التي سيتم تشغيل <م> إذا لك ثم تكرار عبر المجموعة.

وأنا شخصيا لست قلقا جدا حول مقياس مكابي، ولكن أنا متأكد تماما من أن (عند استخدامها بشكل مناسب) LINQ يحسن القراءة. هذا ما كنت <م> حقا يهتمون:)

نصائح أخرى

لقد أتيت مع نفس السؤال ، في الواقع ، لامدا يمكن أن تزيد من cyclomatic التعقيد. لم الاختبار حيث() أحكام يمكن زيادته بشكل معقول.

القراءة هي في الواقع واحدة من أعلى الأولويات.

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


أحافظ على التقدم في بناء/نشر النصي بحيث لم تنشر شيئا دون الوصول إلى الهدف من 25 cyclomatic التعقيد.

انها صعبة لكن أعتقد أنه يستحق كل هذا الجهد.

هذا يمنحني بعض النقاط في المناقشات عند زملائي يأتي مع رمز قائلا:يعمل هذا, هذا ما يهم.


المعلومة هي: الحفاظ على الخاص بك cyclomatic تعقيد أقل من 25. هذا قد تساعدك على الحفاظ على كل طريقة بسيطة بما فيه الكفاية جيد الصيانة.

وجون السكيت أجاب حد كبير مسألة بإيجاز. وأود أن أضيف أن في تجربتي مع لغات عالية المستوى مثل C #، يتم تخفيض قيمة قياس مقياس مكابي بسبب القيمة التي حزم نحوي السكر مثل LINQ يضيف إلى التنمية.

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

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

ومع ذلك، فإن متاحة الآن، وبعيدا أكثر قابلية للقراءة.

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

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