6

ラムダを使用してリストを初期化すると、ILの循環的複雑度が高くなります。なぜ、どのようにしてこの複雑度を取り除くのでしょうか。たとえば、次のコードを使用すると、クラスの静的コンストラクター(実際にはコンパイラーによって生成されます)が非常に複雑になります。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

4

1 に答える 1

2

なんで?ILCCは、異なるジャンプ/分岐先の数として定義されているためです。初期化中のリストには、ラムダ内に含まれる多くの if/then ロジックが含まれています。言語依存のCCは低いと思いますか?

循環的複雑度が高いということは、関数が複雑すぎて、理解、保守、およびテストが困難であることを示しているにすぎません。この場合、そのヒントが正しいかどうかは、述語のリストをどのように使用するかによって異なります。しかし、それはヒントです。CC を低く保つことは、自然の法則と見なされるべきではありません。コードが保守可能でテスト可能であると思われる場合は、ドキュメントで ILCC が高いことに注意し、それが重要ではない理由を説明してから先に進んでください。

于 2010-10-26T09:01:35.450 に答える