循環的複雑度の基本ルールに従って、以下のコードの複雑度は 2 にする必要があります (分岐点は 1 つだけ - for ループ)。
function SumArray(array_to_sum) {
var sum = 0;
for (var i = 0; i < array_to_sum.length; i++) {
sum += array_to_sum[i];
}
return sum;
}
多くの最新のフレームワークなどは、フレームワークjQuery.each()
内の またはほとんどのメソッドなどのデータ マッピング機能を提供しますUnderscore.js
。次のコードを検討してください。
function SumArray(array_to_sum) {
var sum = 0;
jQuery.each(array_to_sum, function(index, value) {
sum += value;
});
return sum;
}
循環的複雑度の典型的なルールにより、2 番目の例の CC 測定値は 1 です。作業はまったく同じであり、人間による関数の複雑さはまったく変わっていません。私がしたことは、データをループする 1 つの手段を別のデータをループする手段に交換することだけでした。
同様に、元の関数の内部を単一の自己呼び出しクロージャーでラップし、メソッドの動作を実際に変更せずに、外側のメソッドの循環的複雑度を 1 にするこの不自然な例を考えてみましょう。
function SumArray(array_to_sum) {
return (function() {
var sum = 0;
for (var i = 0; i < array_to_sum.length; i++) {
sum += array_to_sum[i];
}
return sum;
})();
}
循環的複雑度の真の測定値には、jQuery.each()
特に匿名ローカル クロージャを使用する場合など、データ マッピング/削減方法に関する考慮事項を含める必要がありますか?
おそらく、クロージャーはその複雑さをクロージングの親にエクスポートする必要があります。また、一般的なメソッドは、それを呼び出す関数の複雑さに追加されるエクスポートの複雑さを定義できる必要がありますjQuery.each()
。 .