javascript - AngularJs 中简单 if else if 循环的循环复杂度

标签 javascript angularjs ionic-framework

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

对于正常的 if else if 循环,复杂度很高,在 15 到 20 之间,我需要将其降低到 10 以下,我会这样做吗?

if( ..condition.. ){

}else if( ..condition.. ){

}else if( ..condition.. ){

}

像这样我有大约 15 到 20 个条件。 谁能建议我如何降低复杂性?

最佳答案

这取决于上下文。如果您有重复的业务逻辑,例如

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

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

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

关于javascript - AngularJs 中简单 if else if 循环的循环复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42686129/

相关文章:

javascript - Angular 网格上的批量编辑

javascript - 在指令中使用链接函数附加不同​​的 HTML 元素

android - google play store 和 apple app store 是否仍然支持 ionic v1 应用程序?

css - 与 Ionic app + Bootstrap 中的样式混淆

javascript - Leaflet.js 从 AJAX 添加层

php - zend php 多数组 json_encoding

javascript - 检查窗口高度是否大于 AngularJS 中的 div#content 高度

javascript - 如何使用js增加onclick事件的积分?

javascript - 提供不会减慢页面速度的 javascript 嵌入的最佳方式是什么?

javascript - 未检测到数组中值的更改