[for-loop] for 루프에서 break를 사용하는 것이 나쁜 습관입니까? [닫은]

루프 내에서 break 을 사용하는 것이 나쁜 습관 입니까?for

배열에서 값을 검색하고 있습니다. for 루프 내부와 값이 발견되면 break;for 루프를 종료하기 위해 비교합니다.

이것은 나쁜 습관입니까? 사용 된 대안을 보았습니다. 변수를 정의 vFound하고 값이 발견되면 true로 설정 vFound하고 for문 조건을 확인 합니다. 하지만이 목적을 위해 새 변수를 만들어야합니까?

일반적인 C 또는 C ++ for 루프의 맥락에서 묻습니다.

추신 : MISRA 코딩 지침은 break 사용을 권장합니다.



답변

여기에 많은 답변이 있지만 아직 언급되지 않았습니다.

깔끔하고 쉽게 읽을 수있는 루프를 작성하면 for 루프에서 break또는 사용과 관련된 대부분의 “위험” continue이 무효화됩니다. 루프의 본문이 여러 화면 길이에 걸쳐 있고 중첩 된 하위 블록이 여러 개있는 경우, 일부 코드가 중단 후에 실행되지 않는다는 사실을 쉽게 잊을 수 있습니다. 그러나 루프가 짧고 요점이라면 break 문의 목적이 분명해야합니다.

루프가 너무 커지면 대신 루프 내에서 잘 이름이 지정된 함수 호출을 하나 이상 사용하십시오. 그렇게하지 않는 유일한 이유는 병목 현상을 처리하는 것입니다.


답변

아니요, 휴식은 올바른 해결책입니다.

부울 변수를 추가하면 코드를 읽기가 더 어려워지고 잠재적 인 오류 소스가 추가됩니다.


답변

‘break’문이 포함 된 모든 종류의 전문 코드를 찾을 수 있습니다. 필요할 때마다 이것을 사용하는 것이 완벽하게 합리적입니다. 귀하의 경우이 옵션은 루프에서 나올 목적으로 별도의 변수를 만드는 것보다 낫습니다.


답변

루프 break에서뿐만 아니라 사용 continue하는 for것은 완벽합니다.

코드를 단순화하고 가독성을 향상시킵니다.


답변

나쁜 습관과는 거리가 먼 Python (및 다른 언어?)은 for루프 구조를 확장 하여 루프 가 그렇지 않은 경우 에만 일부 가 실행됩니다 . break

for n in range(5):
    for m in range(3):
        if m >= n:
            print('stop!')
            break
        print(m, end=' ')
    else:
        print('finished.')

산출:

stop!
0 stop!
0 1 stop!
0 1 2 finished.
0 1 2 finished.

사용하지 않고 break편리한 동등한 코드 else:

for n in range(5):
    aborted = False
    for m in range(3):
        if not aborted:
            if m >= n:
                print('stop!')
                aborted = True
            else:
                print(m, end=' ')
    if not aborted:
        print('finished.')


답변

break 문을 사용하는 데 본질적으로 잘못된 것은 없지만 중첩 루프는 혼란 스러울 수 있습니다. 가독성을 높이기 위해 많은 언어 ( 적어도 Java는 지원함)가 레이블 분리를 지원하여 가독성을 크게 향상시킵니다.

int[] iArray = new int[]{0,1,2,3,4,5,6,7,8,9};
int[] jArray = new int[]{0,1,2,3,4,5,6,7,8,9};

// label for i loop
iLoop: for (int i = 0; i < iArray.length; i++) {

    // label for j loop
    jLoop: for (int j = 0; j < jArray.length; j++) {

        if(iArray[i] < jArray[j]){
            // break i and j loops
            break iLoop;
        } else if (iArray[i] > jArray[j]){
            // breaks only j loop
            break jLoop;
        } else {
            // unclear which loop is ending
            // (breaks only the j loop)
            break;
        }
    }
}

break (및 return) 문은 종종 순환 적 복잡성 을 증가시켜 코드가 모든 경우에 올바른 작업을 수행하고 있음을 증명하기 어렵게 만든다고 말할 것입니다.

특정 항목에 대해 시퀀스를 반복하는 동안 중단 사용을 고려하고 있다면 데이터를 보관하는 데 사용되는 데이터 구조를 재고 할 수 있습니다. 세트 또는지도와 같은 것을 사용하면 더 나은 결과를 얻을 수 있습니다.


답변

break 는 사용할 수있는 완전히 허용되는 명령문입니다 ( continue , btw). 코드 가독성에 관한 것입니다. 루프가 너무 복잡하지 않은 한 괜찮습니다.

goto 와 같은 리그가 아니 었습니다 . 🙂