강좌13-Match
match
match는 javascript의 switch 와 유사한 기능을 가지고 있습니다.
즉, 여러 조건들이 각각의 경우에 따라 각자 처리됩니다.
다시 말해, 여러개의 if를 모아놓은 것이라 보면 됩니다.
다만, javascript의 switch와 다른 점은 조건은 범위가 될 수 없다는 점 입니다.
형식은 다음과 같습니다.
match 변수 {
조건 => 실행,
_ => 실행
}
여기에서 _ (placeholder)는 switch의 default와 같이 조건에 맞지 않는 나머지를 의미합니다.
기본 사용법을 예제로 풀어보겠습니다.
기본형
fn main() {
let a = 1;
let result = match a {
1 => "one",
2 => "two",
_ => "many"
};
println!("{}", result);
}
//결과
one
Option과 연결
만일 match에 Option이 조건식으로 들어가면 어떻게 해야하는지 알아보겠습니다.
Option은 반드시 Some과 None이 포함되어야 하므로 match에서도 반드시 포함되어야 합니다.
fn opt(val: Option<i8>) {
match val {
None => println!("None"),
Some(i) => {
println!("Some {}", i);
i
}
}
}
만일 None을 추가하지 않으면 에러가 발생합니다.
Enum과 연결
match의 장점은 바로 enum과의 연결에 있다고 볼 수 있습니다.
설정된 Enum에 값을 설정할 수 있으므로 비로소 Enum에 색을 입힐 수 있게 되었습니다.
예제로 이를 확인해 보겠습니다.
enum Number {
One,
Two,
Three
}
fn count(num: Number) -> u8 {
match num {
Number::One => 1,
Number::Two => 2,
Number::Three => 3
}
}
확장된 Enum과 연결
Enum에 여러 다른 형을 추가할 수 있는데 match에서도 이를 활용하여 처리할 수 있습니다.
enum Alphabet {
A,
B,
C
}
enum Number {
One,
Two,
Three(Alphabet)
}
fn count(num: Number) -> u8 {
match num {
Number::One => 1,
Number::Two => 2,
Number::Three(word) => {
println!("alphabet is {}", word);
3
}
}
}
fn main() {
let a = Number::Three(Alphabet::A);
let result = count(a);
println!("{}", result);
}
댓글남기기