오늘은 Rust의 주석과 조건 반복문에 대해 알아보고자 합니다.
주석
rust의 주석은 Python의 # 과 달리 C++, JAVA와 동일하게 // 으로 구성되어 있습니다.
제어 흐룸문
rust에서 실행 흐름을 제어하도록 해주는 일반적인 방법은 if표현식과 반복문 입니다.
if 표현식
rust에서의 if문은 다음과 같이 사용할 수 있습니다.
fn main() {
let number = 3;
if number < 5 {
println!("condition was true");
} else {
println!("condition was false");
}
}
rust는 c++과 다르게 if문의 타입이 bool이여야 합니다.
fn main() {
let number = 3;
if number {
println!("number was three");
}
}
다음과 같이 실행시, 에러가 발생합니다.
Compiling branches v0.1.0 (file:///projects/branches)
error[E0308]: mismatched types
--> src/main.rs:4:8
|
4 | if number {
| ^^^^^^ expected `bool`, found integer
For more information about this error, try `rustc --explain E0308`.
error: could not compile `branches` due to previous error
해당 에러는 rust가 bool을 예상했으나, 정수형 타입의 값을 받았다는 것을 알려줍니다.
else if로 여러 조건식 다루기
rust에서 else if문은 python의 elif와 다르게 다음과 같이 작성할 수 있습니다.
fn main() {
let number = 6;
if number % 4 == 0 {
println!("number is divisible by 4");
} else if number % 3 == 0 {
println!("number is divisible by 3");
} else if number % 2 == 0 {
println!("number is divisible by 2");
} else {
println!("number is not divisible by 4, 3, or 2");
}
}
let 구문에서 if 사용하기
rust에서 let변수에 if문으로 값을 주입하고자 할 경우 다음과 같이 할 수 있습니다.
fn main() {
let condition = true;
let number = if condition { 5 } else { 6 };
println!("The value of number is: {number}");
}
타입을 지정해주지는 않았지만, number은 i32 타입을 가지게 됩니다.
만약, 다음과 같이 작성한 경우에는 어떻게 될까요?
fn main() {
let condition = true;
let number = if condition { 5 } else { "six" };
println!("The value of number is: {number}");
}
number 변수는 if와 else에서 서로 다른 타입의 값을 가지게 설정함으로 인하여, 컴파일에러가 발생합니다.
Compiling branches v0.1.0 (file:///projects/branches)
error[E0308]: `if` and `else` have incompatible types
--> src/main.rs:4:44
|
4 | let number = if condition { 5 } else { "six" };
| - ^^^^^ expected integer, found `&str`
| |
| expected because of this
For more information about this error, try `rustc --explain E0308`.
error: could not compile `branches` due to previous error
rust는 number변수의 타입이 무엇인지 확실히해야 합니다.
반복문을 이용한 반복
rust는 몇 가지 반복문을 제공합니다.
loop로 코드 반복하기
loop는 언제 그만두라고 명시적으로 알려주기 전까지, 영원히 코드 블록을 반복 수행합니다.
fn main() {
loop {
println!("again!");
}
}
반복문에서 값 반환하기
fn main() {
let mut counter = 0;
let result = loop {
counter += 1;
if counter == 10 {
break counter * 2;
}
};
println!("The result is {result}");
}
해당 코드는 loop 반복문을 통해 counter가 10이 되는 경우 counter * 2를 result에 반환하도록 작성된 코드입니다.
루프 뒤에는 result에 값을 할당하는 구문을 끝내기 위해 세미콜론을 붙였습니다.
루트 라벨로 여러 반복문 사이에 모호함 없애기
fn main() {
let mut count = 0;
'counting_up: loop {
println!("count = {count}");
let mut remaining = 10;
loop {
println!("remaining = {remaining}");
if remaining == 9 {
break;
}
if count == 2 {
break 'counting_up;
}
remaining -= 1;
}
count += 1;
}
println!("End count = {count}");
}
바깥쪽 루프문은 counting_up이라는 라벨이 있고, 라벨이 없는 안쪽 루프문에서는 count의 값이 2인 경우 counting_up을 반환하도록 되어 있습니다.
안쪽 루프문에서 count가 2가 되는 경우 counting_up을 반환하고, 이를 바깥쪽 루프문이 받아서 탈출하게 됩니다.
while을 이용한 조건 반복문
while문을 활용하여 반복문을 작성할 경우, loop, if, else 및 break를 사용하지 않고도 조건 반복문을 사용할 수 있습니다.
fn main() {
let mut number = 3;
while number != 0 {
println!("{number}!");
number -= 1;
}
println!("LIFTOFF!!!");
}
for를 이용한 컬렉션에 대한 반복문
fn main() {
let a = [10, 20, 30, 40, 50];
let mut index = 0;
while index < 5 {
println!("the value is: {}", a[index]);
index += 1;
}
}
다음과 같은 while로 이루어진 반복문을 for문을 활용하여 다음과 같이 작성할 수 있습니다.
fn main() {
let a = [10, 20, 30, 40, 50];
for element in a {
println!("the value is: {element}");
}
}
for루프를 사용하면 배열 내 값의 개수를 변경시키더라도 수정해야 할 다른 코드를 기억해둘 필요가 없어진다.
이러한 안정성과 간편성 덕분에 for 반복문은 러스트에서 가장 흔하게 사용되는 반복문 구성요소가 되었습니다.
for반복문을 이용하여 카운트다운을 구현하면 다음과 같습니다.
fn main() {
for number in (1..4).rev() {
println!("{number}!");
}
println!("LIFTOFF!!!");
}
여기서 rev메서드는 범위값을 역순으로 만들어준다.
정리
- rust의 조건반복문으로는 loop, while, for문이 있다.
- while와 for문은 다른 언어들과 동일하게 사용되고, loop는 반복문에 대한 결과를 반환하고자 while, for보다 효율적으로 사용할 수 있다.
'Rust' 카테고리의 다른 글
Rust 설치부터 실행까지 (참조자) - 9 (0) | 2025.01.05 |
---|---|
Rust 설치부터 실행까지 (소유권) - 8 (0) | 2025.01.02 |
Rust 설치부터 실행까지 (함수, 구문, 표현식) - 6 (0) | 2024.12.28 |
Rust 설치부터 실행까지 (데이터 타입, 튜플, 어레이) - 5 (0) | 2024.12.28 |
Rust 설치부터 실행까지 (섀도어) - 4 (0) | 2024.12.26 |
댓글