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");
}
}
if
키워드로 시작하여 뒤이어 조건이 옵니다. 선택적으로 else if
, else
식을 포함시킬 수 있습니다. 위의 코드는 분기할 수 있는 네 개의 경로를 갖습니다. 너무 많은 else if
식의 사용은 코드 이해를 어렵게 합니다. 이를 위해 후에 6장에 다룰 match
라는 강력한 분기 생성자를 사용합니다.
다른 예시를 알아봅시다.
fn main() {
let number = 3;
if number {
println!("number was three");
}
}위의 예시 코드는 에러가 발생하게 됩니다.
위의 예시 코드는 에러가 발생하게 됩니다.
error[E0308]: mismatched types
--> src/main.rs:4:8
|
4 | if number {
| ^^^^^^ expected bool, found integral variable
|
= note: expected type `bool`
found type `{integer}`
Rust가 Boolean 타입을 기대했으나 정수형이 왔다는 에러입니다. 다른 언어와 달리 Rust는 boolean 타입이 아닌 것을 boolean 타입으로 자동 변환하지 않습니다.
위의 코드를 숫자가 0이 아닐 시에 실행하고 싶다면, 아래와 같이 수정할 수 있습니다.
fn main() {
let number = 3;
if number != 0 {
println!("number was something other than zero");
}
}
if
는 표현식이기 때문에 let
구문의 우측에 사용할 수 있습니다.
fn main() {
let condition = true;
let number = if condition {
5
} else {
6
};
println!("The value of number is: {}", number);
}
위의 코드를 실행하면 number
에는 if
식에서 산출된 5
가 bound 됩니다.
다른 예시를 살펴봅시다.
fn main() {
let condition = true;
let number = if condition {
5
} else {
"six"
};
println!("The value of number is: {}", number);
}
error[E0308]: if and else have incompatible types
--> src/main.rs:4:18
|
4 | let number = if condition {
| __________________^
5 | | 5
6 | | } else {
7 | | "six"
8 | | };
| |_____^ expected integral variable, found reference
|
= note: expected type `{integer}`
found type `&str`
위의 코드에서 에러가 발생한 이유는 if
블록이 정수형을 산출하고 else
블록은 문자열을 산출하기 때문입니다. 이런 경우가 성립하지 않는 이유는 변수가 가질 수 있는 타입이 오직 하나이기 때문입니다. Rust는 컴파일 시에 number
변수의 타입을 정확히 정의해야 합니다. Rust는 number
의 타입을 실행 시에 정의되도록 할 수 없습니다.
fn main() {
loop {
println!("again!");
}
}
위의 코드는 프로그램을 강제 정지하기 전까지 again!
이 반복 출력되는 것을 보게 됩니다. 대부분의 터미널은 단축키 ctrl+C를 통해 정지 가능합니다.
loop
에서는 코드에 break
키워드를 추가하여 루프를 멈출 수 있습니다.
fn main() {
let mut number = 3;
while number != 0 {
println!("{}!", number);
number = number - 1;
}
println!("LIFTOFF!!!");
}
fn main() {
let a = [10, 20, 30, 40, 50];
for element in a.iter() {
println!("the value is: {}", element);
}
}
$ cargo run
Compiling loops v0.1.0 (file:///projects/loops)
Finished dev [unoptimized + debuginfo] target(s) in 0.32 secs
Running `target/debug/loops`
the value is: 10
the value is: 20
the value is: 30
the value is: 40
the value is: 50
for
반복문 사용을 위해 흔히 Rust에서 기본 라이브러리로 제공하는 Range
를 함께 사용하게 됩니다. Range
는 한 숫자에서 다른 숫자 전까지 모든 숫자를 차례로 생성합니다.
fn main() {
for number in (1..4).rev() {
println!("{}!", number);
}
println!("LIFTOFF!!!");
}
3!
2!
1!
LIFTOFF!!!