2017-03-09 61 views
1

我正在重構我的代碼,我使用SonarQube,SonarRunner,JSHint來遵循最佳實踐來檢查代碼的複雜性,質量和重複。AngularJs中的循環複雜性如果循環很簡單

對於正常,如果其他如果循環的複雜性很高,介於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(); 
} 

如果要運行的業務邏輯是完全不同的但不是你可以嘗試所有的條件組進某種功能

eg

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 (... 

的關鍵是要找到在您的業務領域某種自然分組的代表像上例中的不同條件紅色或圓形或美味的物體意味着物體是蘋果。

但是,如果確實沒有表示不同條件的自然分組。它可能更容易告訴你的圈複雜性檢查器簡單地忽略這個大功能。