While..do 반복문

While..do 반복문

조건이 성립하는 동안 계속 반복하고 싶을 때가 있죠. while..do 문은 특정 조건이 참인 동안 문장을 실행하는 반복문이에요. 앞에서 살펴본 repeat..until과는 달리 조건을 먼저 검사하기 때문에, 본문이 한 번도 실행되지 않을 수도 있어요.

출처: Free Pascal Reference - The While..do statement

본문

while..do 문의 원형 문법은 이렇게 생겼어요.

while 표현식 do
  문장

ExpressionTrue로 평가되는 동안 Statement를 계속 실행해요. 여기서 핵심은 ExpressionStatement를 실행하기 전에 평가된다는 거예요. 그래서 조건이 처음부터 거짓이면 Statement는 아예 실행되지 않고 끝나버려요. 이것이 "무조건 한 번은 실행되는" repeat..until과 가장 큰 차이점이에요.

Statement 자리에는 복합 문장(compound statement), 다시 말해 begin..end로 묶은 여러 문장도 올 수 있어요.

앞에서와 마찬가지로, boolean 표현식 Expression은 기본적으로 short-cut 평가돼요. 결과가 확실해지는 지점에서 평가가 멈춘다는 뜻이에요.

다음은 유효한 while 문의 예시예요.

I := I+2;
while i<=100 do
  begin
  WriteLn ('I =',i);
  I := I+2;
  end;

X := X/2;
while x>=10e-3 do
  X := X/2;

위 예시들은 앞에서 repeat 문으로 본 예시와 대응하는 루프예요. 같은 동작을 반복문의 종류만 바꿔서 표현한 거죠.

만약 Statement가 복합 문장이라면, BreakContinue 예약어를 써서 while 문의 끝이나 끝 바로 다음 지점으로 점프할 수 있어요. 여기서도 BreakContinue는 예약어가 아니므로 오버로드할 수 있다는 점을 기억해 두세요.

더 알아보기

  • repeat..until 문(13.2.6)과의 실행 시점 차이를 비교해 보면 반복문을 이해하기 편해요.
  • for 문이나 Break, Continue 제어 흐름도 함께 살펴보면 좋아요.