반복문과 루프 레이블
반복문과 루프 레이블 많은 언어들에서 무한 반복문을 만들기 위해 러스트에서는 다만, 위 코드는 컴파일 시 다음과 같은 에러가 발생한다. Rust 컴파일러가 출력해준 내용 처럼 이유는 맨 마지막 라인이다. 바로 위에서 본 코드는 1번에 해당하는데, Rust에는 루프 label은 아스트로피(`)를 사용하는데, 이는 lifetime의 구문과 유사하지만 전혀 다르며 명확히 구분된다. Rust 반복문
while
while 반복문은 다른 언어들에서 사용하는 방식과 유사하다. 주어진 조건이 참이면 처리를 반복한다.let mut count = 0;
while count < 10 {
println!("{}", count);
count += 1;
}while 문을 아래와 같이 활용한다.while true {
println!("무한 반복");
}loop 키워드를 통해 더 간단히 해결할 수 있다. 위 코드를 빌드하면 아래와 같이 Rust 컴파일러가 친절하게 loop를 사용하라는 warning을 보여준다.
loop
loop 키워드는 다음에 오는 코드 블록을 무한히 반복하는데, break 키워드를 만나거나 프로그램이 종료될 때까지 계속 실행한다.let mut count = 0;
loop {
println!("{}", count);
count += 1;
if count == 10 {
break;
}
} for
for 키워드는 다른 많은 언어들이 반복문을 생성하기 위해 지원하는 키워드다. Rust 언어 역시 for 키워드를 지원한다.let items = [1,2,3,4,5];
for item in items {
println!("{}", item);
}
println!("{:?}", items);
items 변수는 for 문으로 소유권이 이동됬고, 이동된 items 변수를 마지막 라인에서 사용하려 했기 때문이다. 이를 이해 하기 위해선 for 문이 동작하는 방식을 알아야한다. for 반복문은 아래와 같이 세 가지 형태의 메소드로 호출로 확장된다.for item in items -> for item in IntoIterator::into_iter(items)for item in &collection -> for item in collection.iter()for item in &mut collection -> for item in collection.iter_mut()items의 소유권이 into_iter() 메소드로 넘어가서 컴파일 에러가 발생한 것이다. 따라서, items 변수를 읽기 전용으로 반복문을 돌리고, 반복문이 끝난 후에도 소유권을 유지하기 위해서는 아래와 같이 사용해야 한다.for item in &items {
...
}
println!("{:?}", items);for item in items.iter() {
...
}
println!("{:?}", items); for label
goto 키워드가 없는데, 특정 조건에 의해 이중 반복문을 빠져나와야하는 경우 for문에 label을 달고 break 키워드를 활용해서 상황에 맞게 반복문을 빠져나올 수 있다.'outer: for x in 5..50 {
println!("x => {}", x);
for y in 0..10 {
println!("y => {}", y);
if x == y {
break 'outer;
}
}
}
println!("빠져나왔다."); 실행 결과
x => 5
y => 0
y => 1
y => 2
y => 3
y => 4
y => 5
빠져나왔다.