【问题标题】:What are case-labeled statements and case labels?什么是带案例标签的语句和案例标签?
【发布时间】:2016-04-29 11:08:38
【问题描述】:
阅读了 McCabe 关于圈复杂度的 article,内容如下:
发生频率较低但影响较大的问题
复杂性是“案例标记语句”和
“箱子标签。”当多个案例标签适用于同一程序时
声明,这被建模为一个单一的决策结果边缘
控制流图,增加了复杂性。
我不明白 - 什么是“案例标签声明”和“案例标签”?
他们的意思是如果case 1,case 2,例如都跳转到case 3?
【问题讨论】:
标签:
language-agnostic
switch-statement
cyclomatic-complexity
control-flow-graph
【解决方案1】:
是的,McCabe 指出了直接标记语句的案例和落入另一个案例的案例之间的复杂性差异。
每个“带有case-labeled语句的语句”都会增加圈复杂度,所以下面的例子增加了+3。
switch (arg) {
case "foo" : System.out.println("foo");
case "bar" : System.out.println("bar");
case "baz" : System.out.println("baz");
}
一个“case label”落入到另一个case不会增加圈复杂度,所以下面的例子增加了+1。
switch (arg) {
case "foo" :
case "bar" :
case "baz" : System.out.println("foo | bar | baz");
}