定义
一个方法从头走到结束会经过多少种路径。
如下图,该程序的圈复杂度为6。
由定义可以看出,圈复杂度与程序中if-else语句、switch语句的case数量、while语句的循环次数、throw等有直接关系。
影响
圈复杂度越高:
- 程序越复杂,越难以测试和维护
- 容易出bug
如何降低
- 提取函数 - 将独立业务或模块代码独立出来,封装为函数,通过函数名诠释代码作用,做到见名知意。
- 替换算法 - 复杂算法会导致bug可能性的增加及可理解性/可维护性的降低,如果函数对性能要求不高,提倡使用简单明了的算法。
- 分解条件式 - 复杂的条件表达式,使用函数进行封装
- 合并条件式 - 将一系列得到相同结果的条件表达式合并,可以的话封装为函数
- 合并重复的条件片段 - 不同条件的分支,有相同的处理,可以提炼出分支以外,或者封装为函数
- 移除控制标记 - 使用控制标签作为条件的,使用break 和 return取代
- 将查询函数和修改函数分离 - 单一职责原则,强调函数的复用性而不是多用性
- 函数携带参数 - 使用带参函数,强调函数的复用性
- 以明确函数取代参数 - 强调函数的功能的明确性
引用
圈复杂度