循环完备性如果ELSE与SWITCH CASE

时间:2015-10-21 10:40:43

标签: java if-statement switch-statement sonarqube cyclomatic-complexity

许多代码分析工具,如用于切换案例的声纳抛出错误,如果使用而不是多个is-else用于圈复杂度。是否有一个数字应该是一个阈值,当一个人应该使用if else和什么时候应该使用switch case? 如果它的情况为50,为减少圈复杂度,应该使用开关盒?如果你能通过一个例子支持你的答案会好吗?

1 个答案:

答案 0 :(得分:0)

用另一个问题回答这个问题。

您愿意阅读:

if(cond1)..

else if(cond2)...

else if(cond50)...

else ...

value = map.get(key)

如果有太多可能的情况,那么开关或看起来不合适,应该用key-value structurestate machine pattern替换 - 如果分支真的很复杂。

您可以在此处找到示例实现:

fsm

至于何时使用if或switch,请记住,switch不能接受以下类型:

longdoublefloatboolean所以当你有这样的输入时,切换显然不是一个选择。

我不会使用数字作为指标来使用switchif statement。但是有一个例外,如果输入只能有2个可能的值,最好使用if。即使是声纳也应该建议你。

也就是说,switch通常比if语句系列更具可读性。作为一个重要的决策因素,除了可读性之外,在switch语句中可能存在可能需要相同执行路径的值组。它基本上是goto的更安全版本。与if不同,其中每个结果通常都绑定到特定的执行路径。