러스트는 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 |