when2run
TypeScript icon, indicating that this package has built-in type declarations

0.0.2 • Public • Published

Cyclomatic Complexity 圈复杂度

“圈复杂度”(Cyclomatic Complexity),这是衡量程序源代码中线性独立路径数量的一种度量。圈复杂度用来指示程序的复杂性。它是通过程序的控制流图计算得出的:图的节点对应于程序的不可分割的命令组,如果第二个命令可能在第一个命令之后立即执行,则有向边连接两个节点。

How to reduce Cyclomatic Complexity? 如何降低圈复杂度?

  1. 简化条件逻辑
    1. 合并条件:如果可以将多个条件合并成一个,则这样做
    2. 使用守卫子句:用守卫子句替换嵌套条件
      1. 检查无效输入
      2. 检查边界条件
      3. 确保必要条件
    3. 应用德摩根定律:简化复杂的布尔表达式
      1. 原始表达式: !(A && B) 应用德摩根定律后: !A || !B
      2. 原始表达式: !(A || B) 应用德摩根定律后: !A && !B
  2. 分解函数
    1. 提取方法:将大型函数分解为更小、更易于管理的函数
    2. 遵循单一职责原则:确保函数或方法制作一件事
  3. 减少分支
    1. 使用多态性替换条件语句:使用多态性处理不同的情况,而不是使用switch或if-else语句
      1. 多态实现方式
        1. 继承:子类继承父类,并可以拥有自己的行为
        2. 抽象类和接口:定义方法的抽象类型,让子类提供具体实现
        3. 方法重载:相同的方法名,但参数列表不同
        4. 方法覆写:子类重新定义父类的方法
    2. 使用查找表或字典:代替多个if-else或switch-case语句
  4. 循环简化
    1. 移除不必要的循环:消除对最终结果没有贡献的循环
    2. 使用高阶函数:使用map、filter、reduce等函数来简化循环
  5. 重构代码
    1. 移除无用代码:清除不再可达或可用的代码
    2. 内联单次使用的变量:如果一个变量只使用一次,考虑内联该表达式
  6. 使用设计模式
    1. 策略模式:将算法封装到不同的类中,并使用他们可互换
    2. 命令模式:将请求封装为对象,从而允许不同请求的客户端进行参数化
  7. 编写清晰的代码
    1. 可理解的名称:使用清晰且又意义的变量、函数和类名
    2. 保持简单:不要过度设计解决方案;力求最简单的方法来完成工作
  8. 编写测试
    1. 单元测试:独立于应用程序的其余部分对应用程序的小部分进行测试
    2. 测试驱动开发:在编写代码之前编写测试用例,以确保您的代码保持简单,并且只做它应该做的一件事

Conclusion 结论

降低圈复杂度通常是有益的,因为他通常会让代码更易于维护和理解。然而,重要的是要平衡降低复杂性的愿望与其他因素之间的关系,如性能和可读性。有时,增加一些复杂性可以带来更优化或更清晰的代码。

Package Sidebar

Install

npm i when2run

Weekly Downloads

3

Version

0.0.2

License

MIT

Unpacked Size

14.1 kB

Total Files

10

Last publish

Collaborators

  • peteryuan