Rust, if

오병진·2022년 6월 23일
0

Learnning Rust

목록 보기
4/7

사실 아마 당신이 Rust에 입문한다면
당신은 프로그래밍에 입문하는것은 아닐 것 입니다.

그러니 바로 제어문으로 넘어가죠

Let's go

if문

fn main() {
    let number = 3;

    if number < 5 {
        println!("True");
    } else {
        println!("False");
    }
}

간단하죠?
Python처럼 괄호를 사용하지않지만, 그렇다고 중괄호를 사용안하는것은 아닙니다.

boolean값만 들어간다!

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

선언문에 if문 사용하기

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);
}

이렇게 i32str이 충돌하게 되었는데요, 따로 선언문에서 타입을 선언을 안하기에 그냥 넘어갈 것 같지만..!

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`

짜잔 다음과 같이 에러가 나타난답니다.

Rusttype-safe해야하기 때문이죠
그러기에 타입을 명확히 해줘야합니다!

profile
지나가는 사람입니다. 마저 지나갈게요 :D

0개의 댓글