:
이
"위의 코드 조각의 복잡성 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");
}
}
코드가 적을수록 경로를 쉽게 읽을 수 있고, 테스트하고 유지 관리 할 수 있습니다.
너무 단순한 경우 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
왜 순환 복잡성에 관심이 있습니까? 순환 적 복잡성을 줄일 수 있다면 가독성을 줄이겠습니까? –
제가 알다시피, 순환 복잡성은 코드를 통해 선형 적으로 독립적 인 경로의 수입니다. 이것을 줄이기위한 쉬운 방법은 매번 모든 조건을 평가할 것이므로'|| '대신'|'를 사용하는 것입니다. 그래도 개선을보기가 힘듭니다. –