CodeQL 文档

复杂条件

ID: cs/complex-condition
Kind: problem
Security severity: 
Severity: recommendation
Precision: high
Tags:
   - testability
   - readability
Query suites:
   - csharp-security-and-quality.qls

点击查看 CodeQL 存储库中的查询

非常复杂的条件难以理解,因此是许多缺陷的根源。

建议

通常可以通过将复杂表达式分成不同的变量,甚至为条件的某些部分提供它们自己的布尔值方法,来使它们更易于阅读。使用单独的方法既可以减少代码重用,也可以简化表达式。

示例

此示例演示了一些可能的条件以及它们是否可以接受。如您所见,条件的长度并不是导致其复杂性的唯一因素。

class Complex
{
    static bool foo(bool a, bool b, bool c, bool d, bool e, bool f, bool g)
    {
        bool x = a || b || c || d || e || f || g; // OK
        bool y = a && b || !(b && c) || !(d && e) && !(f && g); // NOT OK
        bool z = (a && b || (b && c)) && ((d && e) || (f && g)); // NOT OK
        return x && y && z; // OK
    }
}

参考资料

  • Robert C. Martin - 代码整洁之道:敏捷软件工艺手册,§17.G28

  • Steve McConnell - 代码大全:软件构建实用手册

  • ©GitHub 公司
  • 条款
  • 隐私