Rust - Control Flow
이 글에서는 Rust의 문법 중 Control Flow에 관련된 것들을 다뤄봅시다.
Rust 맛보기
- 1. Rust - 입문하기
- 2. Rust - 타입 모음
- 3. Rust - Memory Ownership
- 4. Rust - Control Flow
- 5. Rust - Structured Data Types
- 6. Rust - Project Organization
- 7. Rust - Error Handling
- 8. Rust - Collections
- 9. Rust - Generics
- 10. Rust - Test Automation
- 11. Rust - Functional Programming
- 12. Rust - Memory Management
반복문
Rust는 loop
이라는 키워드로 반복문을 만들 수 있는데, C에서의 while(1)
과 비슷한 역할을 합니다.
loop {
println!("again!");
}
중요한 특징으로, 반복문을 탈출할 때 값을 리턴할 수 있다는 점이 있습니다.
let mut counter = 0;
let result = loop {
counter += 1;
if counter == 10 {
break counter * 2;
}
};
또한 다중 루프의 경우 각 루프에 라벨을 추가하여, break
시 원하는 라벨로 탈출할 수 있습니다.
'outer: for x in 0..10 {
'inner: for y in 0..10 {
if x == 5 && y == 5 {
break 'outer; // 바로 바깥 루프 탈출
}
}
}
for
반복문
for
반복문은 iter()
메소드를 통해 반복할 수 있는 모든 타입에 대해 사용할 수 있습니다.
Python의 반복문과 용법이 비슷합니다.
let a = [10, 20, 30, 40, 50];
for element in a {
println!("the value is: {}", element);
}
iter()
메소드는 iterator를 반환하는데, 이는 for
반복문에서 사용할 수 있는 타입입니다.
rev()
메소드는 역순으로 순회하는 iterator를 반환합니다.
참고로 위 소스 코드에서 a
는 반복문 종료 이후 더 이상 접근이 불가능합니다. a
의 소유권이 for
문 안으로 넘어갔고, 반복문이 종료되면 a
는 drop되기 때문이죠.
if let
을 사용한 패턴 매칭
match
를 대체하는 기능을 하는 문법입니다.
let config_max = Some(3u8);
match config_max {
Some(3) => println!("three"),
_ => (),
}
위 코드를 if let
을 사용하여 다음과 같이 간결하게 표현할 수 있습니다.
if let Some(3) = config_max {
println!("three");
}
특이하게도 C로 치면 rvalue인 Some(3)
이 let
다음에 오고 있습니다. 왜인지는 저도 잘 모릅니다. 공식 문서를 참조해야 할 것 같습니다.
여기에 else
를 추가할 수도 있습니다.
let config_max = Some(3u8);
if let Some(3) = config_max {
println!("three");
} else {
println!("not three");
}
참고 문헌
-
고려대학교 컴퓨터학과 오상은 교수님의 시스템 프로그래밍(COSE322) 과목 강의자료
Rust 맛보기