2014-09-18 3 views
0

내가 sonarqube 중첩하면 깊이SonarQube - 중첩 된 경우에는 깊이

if (some condition){ 
    some code; 
    if (some condition) { 
     some code; 
    } 
} 

도 여기에이 위반을 받고 있어요 :

for (some condition) { 
    if (some condition) { 
      some code; 
    } 
} 

가 어떻게 깊이를 줄일 수있다?

+0

중첩 된 if 문을 3 플래그로 지정하는 데 대한 기본값은 위의 예제는 2 단계 만있는 반면 생각했습니다. 코드 주위에 더 이상 반복문이나 if 문이 있습니까? –

+0

예, 그 주위에 더 많은 if 문이 있지만 규칙이 변경되었으며 허용되는 최대 값은 1입니다.이를 리팩토링해야합니까?이를 줄이려면 어떻게해야합니까? – james

답변

0

실제 질문은 왜 최대 깊이가 1로 설정되어 있습니까? 과잉이야.

이 규칙은 코드를 읽을 수 있도록하기위한 것입니다. 2 개 이상의 중첩 된 블록은 코드를 읽을 수 없도록 만들 수 있지만 1-2는 항상 읽을 수 있습니다.

최대 깊이를 1로 설정하기로 결정한 경우 코드를 리팩토링하고 모든 두 번째 조건 확인을 별도의 방법으로 수행해야합니다. 당신은 매우 구체적이고 정당한 이유가 없다면 그것은 다소 어리 석다.

1

답변은 이미 접수되었지만 실제 질문에는 대답하지 않습니다. 완성도를 위해 2 센트를 추가하고 싶습니다. 참조 용 This question here

가드 조건을 처리하는 것처럼 보이는 예제가 나타납니다. "이 방법을 실행하는 경우에만 ...."또는 "이 루프 반복을 수행하면 ..."과 같은 것입니다.

이러한 경우에 3 개 또는 4 개의 경비원 그룹이 있으면 매우 깊게 들여 쓰기가 될 수 있습니다 코드를 읽기가 더 어렵게 만듭니다.

어쨌든이 코드를 더 읽기 쉽도록 수정하는 방법은 일찍 반환하는 것입니다. 대신

if (some condition) { 
    // some code 
    if (some other condition) { 
     // some more code 
    } 
} 

의 당신은

if (!some condition) { 
    return; 
} 

// some code 

if (!some other condition) { 
    return; 
} 

// some more code 

을 쓸 수 있습니다 당신은 이제 모든이 중첩의 1 개 수준이 '어떤 조건'이 충족되지 않는 한이 방법을 실행하지 않는 것이 분명하다.

for (some condition) { 
    if (some other condition) { 
     // some code; 
    } 
} 

은 당신이 여기에 언급 할 것은 '다른 조건'을 충족하지 않는 한,이 루프를 건너 뛸 수 있다는 것입니다

for (some condition) { 
    if (!some other condition) { 
     continue; 
    } 
    // some code 
} 

된다 :

같은 계속 사용하여 루프 간다.

관련 문제