我正在重构我的代码,我使用 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/