2016-10-04 6 views
0

자바 세션에서 연설 중이었습니다. 연사는 while 루프에서 break 문을 사용하는 것은 나쁜 습관이라고 말했습니다. 그는 그것이 사용될 수 있다고 말했지만 "좋은 코딩 실천"관점에서 사용되어서는 안됩니다. 그는 왜 그렇게 만족스럽게 설명 할 수 없었습니다.Java에서`while` 루프에서`break` 문을 사용하면 어떤 문제가 있습니까?

그러나이 제한은 for 루프의 경우 유효하지 않다고 언급했습니다. 누구든지 이것에 대해 밝힐 수 있습니까?

편집 : 나는 사실을 말하는 것이 아닙니다. 일반적으로 어떤 동안 (조건).

+0

아무 문제가 있다고 생각하지 않습니다. 더 이상 반복하지 않으려는 경우 break 문을 사용합니다. – cody123

+0

[잘못된 프로그래밍 중단으로 인해 발생합니까?] (http://stackoverflow.com/questions/390481/is-while-true-with-break-bad-programming-practice) 가능한 복제본 –

+4

이것은 단지 학술 학사. 'while '내부의'break'는 항상 현실 세계에서 사용됩니다. 학계에서는 '휴식 (break)'진술에 비해 부울을 설정하거나 삭제하는 경향이 있으며, 종종 목적을 위해 추가 변수를 도입해야한다는 오랜 경향이 있습니다. 무시해. – EJP

답변

1

IMO, while 루프를 사용하면 break가 나쁘지 않습니다. 그러나 연사가 왜 그런 말을했는지 나는 짐작할 수 있습니다.

그래서 나는이 같은 while 루프가있는 경우 : 당신은 확실히 이렇게 코드를 단축 할 수

while (condition1) { 
    if (condition2) { 
     break; 
    } 
    // do other stuff 
} 

을 :

while(condition1 && !condition2) { 
    // do other stuff 
} 

스피커는 생각이 while 루프에서 break의 당신이 쓸 수있는 모든 조건 즉, 괄호 안에 쓸 수 있기 때문에 꼭 필요한 것은 아닙니다.

그러나이 경우는 아닙니다.

while (condition1) { 
    // do other stuff 
    if (condition2) { 
     break; 
    } 
} 

어떻게 당신이 break을 것을 사용하지 않도록 변경합니까 :이 while 루프가 있다면?

while (condition1) { 
    // do other stuff 
    if (condition2) { 
     condition1 = false; 
    } 
} 

저에게는 정말 좋지 않습니다.

의미있는 코드의 한 조각에 넣자. 어떤 생각 할 더 읽을 수 :

while(noWallInFront) { 
    walk(); 
    if (sawFriend) { 
     sayHi(); 
     break; 
    } 
} 

또는 분명히

while(noWallInFront) { 
    walk(); 
    if (sawFriend) { 
     sayHi(); 
     noWallInFront = false; 
    } 
} 

첫 번째, 맞죠? 두 번째 것은 벽처럼 당신의 불의를 대하는 것처럼 들립니다.

+0

면책 조항 : 의견 기반, 등등 - 그럼에도 불구하고, 당신이 휴식에 의존한다면, 아마도 처음에는 나쁜 루프 정의를 만들었을 것입니다. 귀하의 예는 기본적으로 프로그램이 벽까지 걸어가도록 지시합니다. 그럼 당신은 그 규칙에 대한 예외를 정의합니다. 왜? 단순히 따라 할 수있는 규칙을 정의하기 만하면됩니다. 예 : while (walkingIsAGoodThing) {if (sawFriend) {stopToTalk(); walkingIsAGoodThing = false} if (wallInFront) {walkingIsAGoodThing = false}} 하나의 제어 흐름, 예외 없음, 아무런 결과 없음. – mtj

1

많은 사람들이 휴식을 고려하고 실행의 흐름을 방해하고 다른 지점으로 점프하기 때문에 goto 또는 명령처럼 계속합니다. 좋은 실행은 각 실행 블록에 대해 단일 진입 점과 종료 점을 갖는 것입니다.

관련 문제