2017-03-09 7 views
1

私はコードをリファクタリングしています。コードの複雑さ、品質、重複をチェックするベストプラクティスに従うためにSonarQube、SonarRunner、JSHintを使用しています。単純なelse ifループのためのAngularJsの循環的複雑さ

普通のelse ifループでは、複雑さは15から20の間のどこか高いです。私はそれを10以下に減らす必要があります。

if(..condition..){ 

}else if(..condition..){ 

}else if(..condition..){ 

} 

このように私には約15から20の条件があります。 どのようにすれば私は複雑さを減らすことができますか?

+0

コードに20件のif/elseがある場合は、おそらく間違っていると思います – Marko

答えて

0

状況によって異なります。あなたは

if(object.color === 'red'){ 
    runApple(); 
} else if (object.isRound){ 
    runApple(); 
} else if(object.isTasty){ 
    runApple(); 
} 

のようなビジネスロジックを繰り返している場合は、実行するビジネスロジックは、しかし、完全に異なっているなら、あなたは、あなたがしようとするグループのすべての条件文をにすることができますよりも、

function isApple(object){ 
    return object.color === "red" || object.isRound || object.isTasty; 
} 

if(isApple(object){ 
    runApple(); 
} 

にすべてのことをリファクタリングすることができますある種の機能

function isCondition1_2or3(){ 
    return isCondition1() || isCondition2() || isCondition3(); 
} 

function exectue1_2or3(){ 
    if(isCondition1()){ 
    execute1(); 
    } else if (isCondition2()){ 
    execute2(); 
... 
} 

あなたは、キーは、前の例のように異なる条件を表してあなたのビジネスドメイン内の自然なグループ化のいくつかの並べ替えを見つけることです

if(isCondition1_2_or3()){ 
    execute1_2_or3() 
} else if (... 

新しい機能を使用するために大規模な機能をリファクタリングうオブジェクトが赤色または円形またはおいしいのは、オブジェクトがリンゴであることを意味します。

ただし、実際には異なる条件を表す自然なグループは存在しません。あなたのサイクロマティックな複雑さのチェッカーに、その大きな機能を単純に無視する方が簡単かもしれません。

関連する問題