do...while

do...while

do...while 문은 테스트 조건이 true로 평가되는 동안 지정된 문을 실행하는 루프를 만듭니다. 조건은 문을 실행한 후에 평가되므로, 지정된 문이 최소한 한 번은 실행됩니다.

출처: do...while

본문

do...while 문은 테스트 조건이 true로 평가되는 동안 지정된 문을 실행하는 루프를 만듭니다. 조건은 문을 실행한 후에 평가되므로, 지정된 문이 최소한 한 번은 실행됩니다.

구문 (Syntax)

do
  statement
while (condition);
  • statement: 최소한 한 번은 실행되고, 조건이 true로 평가되는 동안 다시 실행되는 문입니다. 여러 문을 실행하려면 블록 문을 사용하세요.
  • condition: 루프를 통과할 때마다 평가되는 표현식입니다. 이 조건이 true로 평가되면 statement가 다시 실행되고, false로 평가되면 실행은 do...while 루프 다음의 문으로 계속됩니다.

설명 (Description)

다른 루핑 문과 마찬가지로, statement 내부에서 제어 흐름 문을 사용할 수 있습니다.

  • break는 문 실행을 중단하고 루프 다음의 첫 번째 문으로 갑니다.
  • continue는 문 실행을 중단하고 condition을 재평가합니다.

do...while 문 구문은 끝에 세미콜론이 필요하지만, 세미콜론이 없어 결과적으로 유효하지 않은 구문이 되면 자동 세미콜론 삽입 과정이 세미콜론을 삽입할 수 있습니다.

예제: do...while 사용하기

다음 예제에서 do...while 루프는 최소한 한 번 반복하고 i가 더 이상 5보다 작지 않을 때까지 다시 반복합니다.

let result = "";
let i = 0;
do {
  i += 1;
  result += `${i} `;
} while (i > 0 && i < 5);
// Despite i === 0 this will still loop as it starts off without the test

console.log(result);

예제: do...while 조건으로 false 사용하기

문이 항상 한 번 실행되므로, do...while (false)는 문 자체를 실행하는 것과 같습니다. 이것은 C 계열 언어에서 흔한 관용구로, break를 사용해 분기 로직에서 일찍 빠져나올 수 있게 합니다.

do {
  if (!user.loggedIn) {
    console.log("You are not logged in");
    break;
  }
  const friends = user.getFriends();
  if (!friends.length) {
    console.log("No friends found");
    break;
  }
  for (const friend of friends) {
    handleFriend(friend);
  }
} while (false);
// The rest of code

JavaScript에는 레이블이 지정된 블록 문을 break와 함께 사용하는 것 같은 몇 가지 대안이 있습니다.

handleFriends: {
  if (!user.loggedIn) {
    console.log("You are not logged in");
    break handleFriends;
  }
  const friends = user.getFriends();
  if (!friends.length) {
    console.log("No friends found");
    break handleFriends;
  }
  for (const friend of friends) {
    handleFriend(friend);
  }
}

또는 함수를 사용할 수도 있습니다.

function handleFriends() {
  if (!user.loggedIn) {
    console.log("You are not logged in");
    return;
  }
  const friends = user.getFriends();
  if (!friends.length) {
    console.log("No friends found");
    return;
  }
  for (const friend of friends) {
    handleFriend(friend);
  }
}

예제: 조건으로 할당(assignment) 사용하기

어떤 경우에는 다음과 같이 조건으로 할당을 사용하는 것이 합리적일 수 있습니다.

do {
  // …
} while ((match = regexp.exec(str)));

그러나 그렇게 하면 가독성 tradeoff가 있습니다. while 문서에 조건으로 할당 사용 섹션이 권장사항과 함께 있습니다.

더 알아보기