코드의 조건이 true
냐 false
냐에 따라 코드의 흐름을 조절하기 위해서 if
혹은 loop문을 사용한다.
if
키워드를 시작으로 뒤에 조건이 온다. bool
타입만이 조건문에 들어갈 수 있으며, if와 let을 활용하여 조건에 따라 변수에 다른 값을 정의할 수 있다. 하지만 다른 타입을 정의하면 컴파일 에러가 난다. 또한 else if
를 활용해여 다양한 조건을 다룰 수 있다.
fn main() {
let condition = true;
let number = if condition { 5 } else { 6 };
println!("The value of number is: {number}");
}
loop
키워드로 블록이 무한 반복된다. 언제 멈춰야 하는 명시해줘야 한다. break
키워드 뒤에 반환 값을 넣을 수도 있다.
fn main() {
let mut counter = 0;
let result = loop {
counter += 1;
if counter == 10 {
break counter * 2;
}
};
println!("The result is {result}");
}
또한 break
나 continue
문을 사용할 때, loop label
을 활용하여 어떤 loop에서 break
혹은 continue
할 지 정할 수 있다.
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}");
}
다른 언어와 마찬가지로 while 조건식이 true
일 경우 loop가 진행된다.
fn main() {
let mut number = 3;
while number != 0 {
println!("{number}!");
number -= 1;
}
println!("LIFTOFF!!!");
}
while 문을 활용해 배열의 모든 값을 출력하는 상황을 예시로 들자. while 문을 쓸 경우, 정확한 길이의 색인을 사용하지 못하면 프로그램은 패닉을 발생하고, 컴파일러가 실행 간에 반복문을 통해 반복될 때마다 요소에 대한 조건 검사를 수행하는 런타임 코드를 추가하기 때문에 느리다. 이러한 문제를 for문을 활용해 보완할 수 있다.
ex1)
fn main() {
let a = [10, 20, 30, 40, 50];
for element in a.iter() {
println!("the value is: {}", element);
}
}
ex2)
fn main() {
for number in (1..4).rev() { // 1부터 4까지 (4 포함 X) range 생성
println!("{}!", number);
}
println!("LIFTOFF!!!");
}