2015-01-13 35 views
2

我正在读一本关于可测试JS的书,并且有一章关于环复杂度,但它并没有真正说明如何计算它。它只是说圈复杂性路径计数

循环复杂度是衡量通过您的代码的独立路径的数量。

,并让这个例子说明它有圈的2复杂性:

function sum(a, b) { 
    if (typeof(a) !== typeof(b)) { 
     throw new Error("Cannot sum different types!"); 
    } else { 
     return a + b; 
    } 
} 

因此,我不知道这是否由例子有3圈复杂度:

function madeup(a) { 
    if (typeof(a) === "string") { 
     if (a === "some") { 
      console.log("is a some"); 
     } else { 
      console.log("not a some"); 
     } 
    } else { 
     console.log("not a string"); 
    } 
} 

而这4:

function madeup(a) { 
    if (typeof(a) === "string") { 
     if (a === "some") { 
      console.log("is a some"); 
     } else { 
      console.log("not a some"); 
     } 
    } else { 
     if (a === 5) { 
      console.log("is a 5"); 
     } else { 
      console.log("not a 5"); 
     } 
    } 
} 

+1

正如你所说,你只是计算路径。你计算正确。 – AbcAeffchen

回答

1

是的,你计算正确。我认为这就是所有可以说的。

如果您不确定,可以将函数放入http://jshint.com,它会告诉您圆圈复杂度是多少。

+0

谢谢,是的,我在我的IDE中使用这个jshint的功能来检查代码。 –

0

在第一个示例中,“throw new Exception”和RETURN语句导致该方法结束,并且所有变量都超出范围。

第二个和第三个示例中的方法都在代码的最后一行之后终止。第二个和第三个方法只在一个地方退出代码,最后一行。

如果在console.log方法之后有一个RETURN语句,那么你会是正确的。

就目前来看,例子二和三的圈复杂度为1。