好的 - 我和我一起工作的人写过像这样的东西
if()
if()
if()
if()
if()
我不喜欢这个!!
如果有十个不同的布尔标志,那里有多少个组合?
10阶乘?
我想解释为什么这很糟糕
答案 0 :(得分:3)
2在10度= 1024
我想解释为什么这很糟糕
这可能不一定是坏事。每种情况都会导致一半案件被切断。如果您知道在第一个条件为真时您只需要做某事,那么您已经丢弃了512个案例。这就是那些检查的重点。
然而,您可以将其重写为更好看,更具可读性:
if(c1 && c2 && c3 && c4 && c5)
答案 1 :(得分:2)
每个标志有两个状态,10个标志表示2 ^ 10 = 1024
答案 2 :(得分:1)
出于这个原因,大多数优秀的静态代码分析器都有最大级别的缩进。处理具有如此高级别嵌套的所有逻辑情况变得非常困难。
这是在函数顶部检查一个大块中的所有错误条件的典型新手错误吗?
如果是这样,您可能希望让代码的作者将其更改为if语句序列而不是这个重度嵌套的构造。
if(error1) {
/* report error 1 and exit */
}
if(error2) {
/* report error 2 and exit */
}
if(error3) {
/* report error 3 and exit */
}
...
使测试代码变得更加容易,并且提供有关特定错误的定制信息,而不是一个通用的“某些不好”的声明。
答案 3 :(得分:0)
最多2 ^ 10 = 1024个路径(如果条件完全独立,则达到最大值)
在一种方法中有许多路径被称为具有高复杂性。这种高复杂性会影响可维护性和可测试性。显然,复杂的方法更容易出错,更难以测试和维生素。
复杂性不一定是问题:问题的某些解决方案具有无法消除的固有复杂性。换句话说,一些问题确实很难找到解决方案。在这些情况下,您可以通过将复杂方法拆分为较小的方法来降低局部复杂性(这显然不会降低全局复杂性)。
在其他情况下删除额外的复杂性:找到一个更简单的解决方案(很容易说,我知道); - )