AngularJs中的Cyclomatic Complexity用于简单的if else if循环

时间:2017-03-09 03:29:26

标签: javascript angularjs ionic-framework

我正在重构我的代码,我正在使用SonarQube,SonarRunner,JSHint来遵循最佳实践来检查代码的复杂性,质量和重复。

对于正常的if if if循环,复杂度很高,介于15到20之间,我需要将其降低到10以下。我应该这样做。

if( ..condition.. ){

}else if( ..condition.. ){

}else if( ..condition.. ){

}
像这样,我有大约15到20个条件。 任何人都可以建议我如何降低复杂性?

1 个答案:

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

关键是在您的业务领域中找到某种自然分组,表示不同的条件,例如前一个示例中的对象为红色或圆形或美味意味着该对象是苹果。

但是,如果确实没有代表不同条件的自然分组。它可能更容易告诉你的圈复杂度检查器简单地忽略那个大函数。