C# 这个If语句中有多少个组合
好的,我有个同事写过这样的东西C# 这个If语句中有多少个组合,c#,math,C#,Math,好的,我有个同事写过这样的东西 if() if() if() if() if() 我不喜欢这个 如果有十个不同的布尔标志,有多少个组合 10阶乘 我试图解释为什么在10度=1024时这是不好的 我试图解释为什么这是不好的 这未必是坏事。每种情况都会减少一半的病例。如果您知道您只需要在第一个条件为真时执行某些操作,那么您已经放弃了512个案例。这就是那些检查的重点 但是,您可以将其重写为更好看、更可读的内容: if(c1 &&
if()
if()
if()
if()
if()
我不喜欢这个
如果有十个不同的布尔标志,有多少个组合
10阶乘
我试图解释为什么在10度=1024时这是不好的 我试图解释为什么这是不好的 这未必是坏事。每种情况都会减少一半的病例。如果您知道您只需要在第一个条件为真时执行某些操作,那么您已经放弃了512个案例。这就是那些检查的重点 但是,您可以将其重写为更好看、更可读的内容:
if(c1 && c2 && c3 && c4 && c5)
每个标志有两个状态和10个标志意味着2^10=1024出于这个确切的原因,大多数好的静态代码分析器都有一个最大缩进水平。处理具有如此高嵌套级别的所有逻辑案例变得非常困难 这是一个典型的新手错误,在函数顶部的一个大范围内检查所有错误条件吗 如果是这样的话,您可能希望让代码的作者将其更改为一系列If语句,而不是这种高度嵌套的结构
if(error1) {
/* report error 1 and exit */
}
if(error2) {
/* report error 2 and exit */
}
if(error3) {
/* report error 3 and exit */
}
...
使测试代码和提供有关特定错误的定制信息变得更加容易,而不是一个通用的“something's bad”语句。最多2^10=1024条路径(如果条件完全独立,则达到最大值)
在一个方法中具有多条路径称为具有高复杂性。这种高复杂性会影响可维护性和可测试性。显然,复杂的方法更容易出错,更难测试和维护
复杂性不一定是问题:一些问题的解决方案具有无法消除的内在复杂性。换句话说,有些问题确实很难找到解决办法。在这些情况下,您可以通过将复杂方法拆分为较小的方法来降低局部复杂性(这不会明显降低全局复杂性)
在其他情况下,消除额外的复杂性:找到一个更简单的解决方案(说起来容易,我知道);-) 也就是说,2**10或1024。@Bobby:聪明的程序员知道2^10等于8;我对如何重构这段代码很感兴趣……我不明白这有什么不好,这很可能是解决他/她正在研究的问题的最好方法。无论你如何安排你的
if
s,都会有相同数量的标志和组合。@harryovers:这样的代码会扭曲你的大脑去理解。嵌套ifs imho总是一个坏主意!另外,最后一个if在不同的范围内,除非括号被假定为。@ck,如果返回语句的意图是明确的,则一点也不,如函数中的六个返回语句。五个在顶部用于单独的错误案例,一个在底部用于良好的结果。然而,让返回语句在返回不同内容的函数中四处流淌,这无疑是重构的一大难题!