复杂条件¶
ID: cs/complex-condition
Kind: problem
Security severity:
Severity: recommendation
Precision: high
Tags:
- testability
- readability
Query suites:
- csharp-security-and-quality.qls
非常复杂的条件难以理解,因此是许多缺陷的根源。
建议¶
通常可以通过将复杂表达式分成不同的变量,甚至为条件的某些部分提供它们自己的布尔值方法,来使它们更易于阅读。使用单独的方法既可以减少代码重用,也可以简化表达式。
示例¶
此示例演示了一些可能的条件以及它们是否可以接受。如您所见,条件的长度并不是导致其复杂性的唯一因素。
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 - 代码大全:软件构建实用手册