【发布时间】:2016-01-24 06:57:14
【问题描述】:
我正在尝试编写一个类似于以下不使用任何这些表达式的过程:
if | while | for | case | default | continue | goto | && | || | catch
| ternary operator ?: | ??
原因是当像度量(eclipse)这样的插件计算圈复杂度时,每个表达式都会根据路径的数量将圈复杂度增加一。
String getWeekday (int order) {
switch (order) {
case 0: return "Monday";
case 1: return "Tuesday";
case 2: return "Wednesday";
case 3: return "Thursday";
case 4: return "Friday";
case 5: return "Saturday";
case 6: return "Sunday"
default: throw new IllegalArgumentException();
}
}
对于这个简单的过程,由于案例语句的数量,圈复杂度实际上会很高,即使对于人脑来说并不复杂。
作为实践,我很好奇是否有可能创建一个包含尽可能多的决策的程序,主要使用这些或其他表达式(同时不要过度使用上述表达式——一两个就可以了)?
else | do | switch | try | using | throw | finally | return
| object creation | method call | field access
这会“愚弄”插件,使其认为 CC 低于应有的水平,因为路径更多,但它会忽略这些表达式。
【问题讨论】:
-
如果可能的话,你为什么要通过制作最有可能由高度不可读的代码来欺骗插件
-
该代码归结为
map.get(order)。 -
如果没有
case或default,您如何使用switch,这是什么using?else也一样,没有 if 就不是合法关键字 -
仅仅因为你对欺骗插件感到好奇并不会降低代码的圈复杂度。
-
编译器不会优化大部分内容吗?
标签: java cyclomatic-complexity