while — 조건이 참인 동안 스크립트 반복 실행하기

while — 조건이 참인 동안 스크립트 반복 실행하기

같은 작업을 조건이 참인 동안 계속 반복하고 싶을 때 while이 기본이에요. 조건을 expr이 평가하는 방식 그대로 표현식으로 평가하고, 값이 true이면 본문을 실행하고, 다시 조건을 평가하길 반복해요. 흔한 실수인 중괄호 누락과 무한 루프 문제를 잘 짚어두면 실제 코드에서 많이 헤맬 일이 없어요.

출처: 문서

본문

문법

while test body

while 명령어는 test를 (expr이 인자를 평가하는 것과 같은 방식으로) 표현식으로 평가해요. 표현식의 값은 올바른 boolean 값이어야 해요. 값이 true이면 body를 Tcl 인터프리터에 전달해 실행해요. body를 실행한 뒤 test를 다시 평가하고, test가 false boolean 값으로 평가될 때까지 이 과정을 반복해요.

  • body 안에서 continue 명령어를 실행해 루프의 현재 반복을 끝낼 수 있어요.
  • body 안에서 break 명령어를 실행해 while 명령어를 즉시 종료할 수 있어요.

while 명령어는 항상 빈 문자열을 반환해요.

주의: test는 거의 항상 중괄호로 감싸야 해요. 그렇지 않으면 while 명령어가 시작하기 전에 변수 치환이 이뤄져, 루프 본문이 만든 변수 변경이 표현식에 반영되지 않아요. 이렇게 되면 무한 루프가 되기 십상이에요. test를 중괄호로 감싸면 변수 치환이 (각 루프 반복 전에) 표현식이 평가될 때까지 지연되므로, 변수 변경이 반영돼요. 예를 들어 다음 스크립트를 $x<10 주변의 중괄호 유무에 따라 실행해보세요:

set x 0
while {$x<10} {
    puts "x is $x"
    incr x
}

예제

스트림 끝에 도달할 때까지 채널에서 줄을 읽고, 줄 번호를 앞에 붙여 출력하기:

set lineCount 0
while {[gets $chan line] >= 0} {
    puts "[incr lineCount]: $line"
}

더 알아보기

  • break, continue, for, foreach — 반복·흐름 제어 명령어
  • 관련 키워드: boolean, loop, test, while