После правки:
«Сложность фрагмента коды выше 7»
Я думаю, что эта проблема является инструментом, который используется для измерения сложности.
Если заменить его
if(val || val2 || val3|| val4|| val5|| val6)
по
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
- группировки операторов условий, которые разделены в то время как это может быть один оператор, который
- выхода из метода, когда условие позволяет это сделать и не дожидаясь для одной точки выхода.
вы должны показать больше коды, потому что этот код не имеет цикломатическую сложности: у вас есть один путь. – davidxxx
Почему вас беспокоит сложность цикломатов? Не могли бы вы уменьшить удобочитаемость, если бы вы могли уменьшить циклическую сложность? –
Как я понимаю, циклическая сложность - это число линейно независимых путей через код. Простым способом сокращения было бы использовать '|' вместо '||', поскольку это заставляло бы каждый раз оценивать все условия. Тем не менее, мне трудно видеть улучшение. –