После вашего редактирования:
«Сложность приведенного выше фрагмента равна 7»
Я думаю, что проблема заключается в инструменте, который вы используете для измерения сложности.
Если вы замените его
if(val || val2 || val3|| val4|| val5|| val6)
by
boolean condition = val || val2 || val3|| val4|| val5|| val6;
if(condition)
в чем сложность сейчас?
В разработке цикломатическая сложность обычно относится к потенциальным путям в потоке кода. Достаточно часто это связано с вложенными условными блоками.
Мы говорим о коде, который имеет важную цикломатическую сложность, как о стрелочном коде, поскольку вложенные уровни рисуют своего рода стрелку.
В вашем примере кода это не проблема, так как у вас есть только три возможных пути:
public void doSomething(boolean val, boolean val2, boolean val3, boolean val4, boolean val5, boolean val6)
{
if(val || val2 || val3|| val4|| val5|| val6)
{
System.out.println("hello");
}
else{
System.out.println("hello world");
}
}
- Первый путь :
if(val || val2 || val3|| val4|| val5|| val6)
- Второй путь :
else{
- Третий путь: код между
else
и концом метода
Чем меньше в коде возможных путей, тем легче его читать, тестировать и поддерживать.
В вашем слишком простом случае вы можете уменьшить сложность, используя не оператор else
. Которые удаляют потенциальный путь:
public void doSomething(boolean val, boolean val2, boolean val3, boolean val4, boolean val5, boolean val6)
{
if(val || val2 || val3|| val4|| val5|| val6)
{
System.out.println("hello");
return;
}
System.out.println("hello world");
}
Но очевидно, что ваши примеры слишком просты, чтобы выявить серьезные проблемы, связанные со сложностью.
Вот модифицированная версия вашего примера кода, где сложность связана с рефакторингом кода для уменьшения цикломатической сложности.
public void doSomething(boolean val, boolean val2, boolean val3, boolean val4, boolean val5, boolean val6)
{
if(val || val2 || val3|| val4|| val5|| val6)
{
if (condition){
if (val8 && val9){
...
}
else {
if (condition2 && condition3){
System.out.println("hello");
}
}
}
}
else{
System.out.println("hello world");
}
}
Как правило, чтобы уменьшить цикломатическую сложность, вы должны уменьшить количество возможных путей. Вы можете добиться этого:
- избегая необязательных
else
- группировка операторов условий, которые разделены, в то время как это может быть один оператор, который
- выход из метода, когда это позволяет условие, а не ожидание единственной точки выхода.
person
davidxxx
schedule
14.02.2017
|
вместо||
, так как это заставляло бы каждый раз оценивать все условия. Хотя я с трудом вижу улучшения. - person Ole V.V.   schedule 14.02.2017