사실 아마 당신이 Rust에 입문한다면
당신은 프로그래밍에 입문하는것은 아닐 것 입니다.
그러니 바로 제어문으로 넘어가죠
Let's go
fn main() {
let number = 3;
if number < 5 {
println!("True");
} else {
println!("False");
}
}
간단하죠?
Python처럼 괄호를 사용하지않지만, 그렇다고 중괄호를 사용안하는것은 아닙니다.
fn main() {
let number = 3;
if number {
println!("number was three");
}
}
그리고 여타 동적언어들처럼 if문에 bool이 아닌 값을 넣는건 불가능합니다.
다음과 같은 에러가 나타나니깐요
error[E0308]: mismatched types
--> src/main.rs:4:8
|
4 | if number {
| ^^^^^^ expected bool, found integral variable
|
= note: expected type `bool`
found type `{integer}`
그렇다면 분기가 여러개라면 어떨까요?
fn main() {
let number = 7;
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");
}
}
다음과 같이 else if
를 사용하며 여러번 분기가 가능합니다 :D
하지만 이런 많은 분기는 코드를 더럽게 만듭니다!
나중에 match
를 통해서 정리해볼게요 :D
rust에서 if는 표현식입니다.
마치 음, 우리가 삼항 연산자를 사용하는거처럼 쓸 수 있다는거죠
fn main() {
let condition = true;
let number = if condition {
1
} else {
0
};
println!("The value of number is: {}", number);
}
다음과 같이 말이에요!
println
에 있는 {}
은 포매팅 방식이에요
이것도 나중에 다뤄볼거에요~
하지만 위의 경우 둘 다 5
, 6
이라는 i32
의 자료형입니다
만약 자료형이 다르면 어떻게 될까요?
fn main() {
let condition = true;
let number = if condition {
5
} else {
"six"
};
println!("The value of number is: {}", number);
}
이렇게 i32
와 str
이 충돌하게 되었는데요, 따로 선언문에서 타입을 선언을 안하기에 그냥 넘어갈 것 같지만..!
error[E0308]: if and else have incompatible types
--> src/main.rs:4:18
|
4 | let number = if condition {
| __________________^
5 | | 1
6 | | } else {
7 | | "zero"
8 | | };
| |_____^ expected integral variable, found reference
|
= note: expected type `{integer}`
found type `&str`
짜잔 다음과 같이 에러가 나타난답니다.
Rust
는 type-safe
해야하기 때문이죠
그러기에 타입을 명확히 해줘야합니다!