我正在重构我的代码,我正在使用SonarQube,SonarRunner,JSHint来遵循最佳实践来检查代码的复杂性,质量和重复。
对于正常的if if if循环,复杂度很高,介于15到20之间,我需要将其降低到10以下。我应该这样做。
if( ..condition.. ){
}else if( ..condition.. ){
}else if( ..condition.. ){
}
像这样,我有大约15到20个条件。
任何人都可以建议我如何降低复杂性?
答案 0 :(得分: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();
}
如果要运行的业务逻辑完全不同,那么您可以尝试将所有条件组合成某种函数
e.g。
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 (...
关键是在您的业务领域中找到某种自然分组,表示不同的条件,例如前一个示例中的对象为红色或圆形或美味意味着该对象是苹果。
但是,如果确实没有代表不同条件的自然分组。它可能更容易告诉你的圈复杂度检查器简单地忽略那个大函数。