2010-10-26 30 views
6

लैम्बडास के साथ सूची का प्रारंभ उच्च आईएल चक्रवात जटिलता का कारण बनता है: क्यों, और इस जटिलता को कैसे हटाया जाए? उदाहरण के लिए निम्नलिखित कोड कक्षा के स्थिर कन्स्ट्रक्टर (जो वास्तव में संकलक उत्पन्न होता है) बहुत जटिल होने का कारण बनता है: 1 + सूची गिनती।लैम्ब्डा के साथ सूची प्रारंभिकरण उच्च चक्रवात जटिलता का कारण बनता है?

static List<Predicate<string>> list = new List<Predicate<string>>() 
{ 
    s => s == null, 
    s=> s.StartsWith(“R”), 
    ... With a lot of predicates like that …. 
}; 

नोट: जटिलता NDepend

उत्तर

2

क्यों साथ गणना की जाती है? क्योंकि ILCC को विभिन्न कूद/शाखा गंतव्यों की संख्या के रूप में परिभाषित किया गया है। उस सूची में आप प्रारंभ कर रहे हैं जिसमें लम्बास के भीतर बहुत कुछ/फिर तर्क शामिल है। मुझे लगता है कि भाषा-निर्भर सीसी कम है?

उच्च cyclomatic complexity सिर्फ संकेत है कि आपके कार्य अधिक जटिल हैं, और इस प्रकार समझने और बनाए रखने और परीक्षण करने में कठिनाई होती है। चाहे इस मामले में संकेत सही है, इस बात पर निर्भर करेगा कि आप भविष्यवाणियों की उस सूची का उपयोग कैसे करते हैं। लेकिन यह सिर्फ एक संकेत है। सीसी को कम रखना प्रकृति के कानून के रूप में नहीं माना जाना चाहिए। यदि आपको लगता है कि कोड रखरखाव योग्य और परीक्षण योग्य है, तो अपने दस्तावेज़ में उच्च आईएलसीसी को नोट करें, समझाएं कि इससे कोई फर्क नहीं पड़ता, और आगे बढ़ें।

+0

असल में अगर मैं कोड को संकुचित करता हूं और यदि मैं अच्छी तरह से समझता हूं आईएल (मैं इसके बारे में एक डमी हूं), भेड़ का बच्चा अलग से उत्पन्न होता प्रतीत होता है। शाखाएं कंपाइलर कोड पीढ़ी के आर्टेफैक्ट की तरह दिखती हैं। – sthiers

+0

शायद आप विघटित आईएल का एक संक्षिप्त निकास जोड़ सकते हैं, जो हमारे लिए वीएस में भागने के लिए बहुत आलसी हैं। मुझे आश्चर्य है कि लैंबडा वास्तव में स्थिर रचनात्मक जटिलता की ओर गिनने के लिए स्थिर प्रारंभिक बिंदु के बिंदु पर उत्पन्न नहीं होते हैं। –

+0

L_0008: ldsfld वर्ग Predicate'1 Foo.Class1 :: सीएस $ <> 9__CachedAnonymousMethodDelegate12 L_000d: brtrue.s L_0022 L_000f: ldnull L_0010: ldftn bool Foo.Class1 :: b__0 (स्ट्रिंग) L_0016: newobj उदाहरण शून्य [mscorlib] Predicate'1 :: ctor (वस्तु, देशी पूर्णांक) L_001b:। stsfld वर्ग [mscorlib] Predicate'1 Foo.Class1 :: सीएस $ <> 9__CachedAnonymousMethodDelegate12 L_0020: br.s L_0022 L_0022: ldsfld क्लास prredicate'1 Foo.Class1 :: CS $ <> 9__CachedAnonymousMethodDelegate12 L_0027: कॉलवर्ट इंस्टेंस शून्य जेनेरिक। सूची '1 <वर्ग [mscorlib] भविष्यवाणी'1 > :: जोड़ें (! 0) – sthiers

संबंधित मुद्दे