본문 바로가기

Rust

[Rust] match 흐름 제어 연산자

러스트는 match라고 불리는 극도로 강력한 흐름 제어 연산자를 가지고 있는데 이는 우리에게 일련의 패턴에 대해 어떤 값을 비교한 뒤 어떤 패턴에 매치되었는지를 바탕으로 코드를 수행하도록 해줍니다. match는 enum과 같이 사용했을 때 매우 강력한 도구로 사용될 수 있습니다. 

 

enum Coin {
    Penny,
    Nickel,
    Dime,
    Quarter,
}

fn value_in_cents(coin: Coin) -> u32 {
    match coin {
        Coin::Penny => 1,
        Coin::Nickel => 5,
        Coin::Dime => 10,
        Coin::Quarter => 25,
    }
}

함수의 매개변수로 열거형 Coin을 받고 match coin으로 coin이 어떤 것에 해당되는지에 따라 코드를 실행합니다.

fn value_in_cents(coin: Coin) -> u32 {
    match coin {
        Coin::Penny => {
            println!("Lucky penny!");
            1
        },
        Coin::Nickel => 5,
        Coin::Dime => 10,
        Coin::Quarter => 25,
    }
}

여러 줄의 코드를 실행시키고 싶다면 중괄호를 사용할 수 있습니다. Penny를 보면 println! 을 실행시킨 후 1을 반환합니다.

값을 바인딩하는 패턴들 또한 존재합니다. 

#[derive(Debug)] // So we can inspect the state in a minute
enum UsState {
    Alabama,
    Alaska,
    // ... etc
}

enum Coin {
    Penny,
    Nickel,
    Dime,
    Quarter(UsState),
}

fn value_in_cents(coin: Coin) -> u32 {
    match coin {
        Coin::Penny => 1,
        Coin::Nickel => 5,
        Coin::Dime => 10,
        Coin::Quarter(state) => {
            println!("State quarter from {:?}!", state);
            25
        },
    }
}

위의 코드처럼 Coin::Quater variant가 UsState 값을 들고 있어 match를 사용할 때 UsState값 또한 사용할 수 있습니다. 

 

_변경자를 활용해 원하지 않는 값을 필터링할 수 있습니다. 

let some_u8_value = 0u8;
match some_u8_value {
    1 => println!("one"),
    3 => println!("three"),
    5 => println!("five"),
    7 => println!("seven"),
    _ => (),
}

som_u8_value는 0 ~255까지의 값을 가질 수 있습니다. 하지만 필요한 값이 1,3,5,7만이라면 그에 해당하지 않는 값들은 모두 _와 매칭 되어 아무것도 실행하지 않을 것입니다.

 

'Rust' 카테고리의 다른 글

[Rust] 문자열  (0) 2022.04.25
[Rust] Option 과 Result  (0) 2022.04.25
[Rust] enum 열거형  (0) 2022.04.23
[Rust] 구조체의 메소드  (0) 2022.04.22
[Rust] 참조자(References) 와 빌림(Borrowing)  (0) 2022.04.21