Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 这个If语句中有多少个组合_C#_Math - Fatal编程技术网

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,如果返回语句的意图是明确的,则一点也不,如函数中的六个返回语句。五个在顶部用于单独的错误案例,一个在底部用于良好的结果。然而,让返回语句在返回不同内容的函数中四处流淌,这无疑是重构的一大难题!