5.7. while 반복문 (while Loops) - 100%
러스트에는 while
반복문 역시 존재합니다. 다음과 같은 모습이죠:
let mut x = 5; // mut x: i32
let mut done = false; // mut done: bool
while !done {
x += x - 3;
println!("{}", x);
if x % 5 == 0 {
done = true;
}
}
while
반복문은 당신이 얼마나 많은 횟수를 반복해야할지 확신이 없을 때 좋은 선택지입니다.
무한 루프가 필요할 때, 다음과 같이 쓰고 싶은 마음이 들겠죠:
while true {
하지만, 러스트는 이 경우를 위한 예약어 loop
를 가지고 있습니다:
loop {
이렇게 생성된 반복문은 항상 반복할 것이기 때문에, 러스트의 제어흐름 분석은 이러한 반복문을 while true
와 다르게 취급합니다. 일반적으로, 우리가 컴파일러에게 더 많은 정보를 줄수록 컴파일러는 더 나은 보안과 최적화를 할 수 있기 때문에, 만약 무한 루프를 만들 생각이라면 loop
키워드를 사용하는게 좋습니다.
반복을 이르게 끝내기
아까 전 보았던 while
반복문을 다시 한 번 살펴보죠:
let mut x = 5;
let mut done = false;
while !done {
x += x - 3;
println!("{}", x);
if x % 5 == 0 {
done = true;
}
}
보시다시피, 언제 반복문을 빠져나가야 할 지 알기 위해서 mut
불리언 변수 바인딩인 done
이 계속 유지되어야 합니다. 러스트는 반복을 조작하기 위한 두 가지 키워드를 제공합니다: break
와 continue
죠.
이 경우, 우리는 break
를 이용해 반복문을 보다 나은 방식으로 작성할 수 있습니다:
let mut x = 5;
loop {
x += x - 3;
println!("{}", x);
if x % 5 == 0 { break; }
}
loop
를 이용해 무한 반복문을 만든 뒤 break
를 이용해 빠져나오는거죠.
continue
역시 비슷한 일을 하지만, 반복문을 끝내버리는 대신 다음 반복으로 넘어갑니다. 예를 들어, 아래의 코드는 홀수만 출력하죠:
for x in 0..10 {
if x % 2 == 0 { continue; }
println!("{}", x);
}
continue
와 break
는 둘 다 while
반복문과 for 반복문 내부에서 사용 가능합니다.