我试图理解sonarqube如何计算认知复杂性,我想知道这是否正确,例如这个函数的复杂性确实是16。我猜不是16,因为没有超过15的限制。你能告诉我这个函数的认知复杂度是多少吗?谢谢你。
bool sonarQuestion()
{
if (not (1 and 0 and 1)) // 1 + 2 (1 for if + 2 logical operators) = 3
{
return false;
}
if (1 and 1) // 1 + 1 = 2
{
if (not (1 and 2 and 3 and (1 or 0))) // 1 + 4 + 1 (1 for if + 4 logical operator + 1 for nesting) = 6
{
return false;
}
}
if (2) // 1
{
if (not (2 and 3 and 5)) // 1 + 2 + 1 = 4
{
return false;
}
}
// total is 16
return true;
}
这是一种看待复杂性的有趣方式。我对Sonar一点也不熟悉,但我确实找到了他们解释原理的链接。看了那个文档,我认为你的例子得12分:
bool sonarQuestion()
{
// 1 + 1 (1 if, 1 sequence of operators)
if (not (1 and 0 and 1))
{
return false;
}
if (1 and 1) // +1 +1
{
// +2 +2 (nested if, 2 sequences)
if (not (1 and 2 and 3 and (1 or 0)))
{
return false;
}
}
if (2) // +1
{
if (not (2 and 3 and 5)) // +2 +1
{
return false;
}
}
// total is 2 + 6 + 4 = 12
return true;
}