프로그래밍/RUST
러스트 17 - if let
시뻘건 튼튼발자
2019. 3. 30. 22:21
반응형
이번 장에서는 코드를 보다 간결하게 제어하기 위한 "if let"이라는 녀석을 알아본다.
if let 구문은 하나의 패턴과 일치하는 값을 처리하고 나머지는 무시할 수 있도록 해준다.
(간결한 이유 인가?라는 의문이 생긴다..)
"어떠한 옵션 값을 매칭 시켜, 그 값이 특정 값일 경우에만 코드를 실행시키고 싶다!"라고 한다면 내 생각에는 두 가지의 방법이 있을 수 있다.
지금 부터 간결하고도 간편한 방법. if let을 소개한다.
다음 코드를 보자
fn main() {
let var = 3;
let some_u8_value = Some(var);
// 첫 번째 방법
match some_u8_value {
Some(3) => println!("three"),
_ => (),
}
// 두 번째 방법
if let Some(3) = some_u8_value {
println!("three");
}
}
if let 구문은 표현식을 받는다. 작동 원리는 기본적으로 match와 동일하다.
(만약 var의 값이 바뀐다면 output이 없을 것이다.)
표현식은 match에 주어지고 패턴은 첫 arm과 같다.
match가 실행하는 철저한 checking은 실행되지 않는다.
단순하게 코드의 길이가 짧아져서 타이핑하는 횟수 혹은 시간이 줄어드는 것 보다, 표준 코드가 줄어드는 것이 큰 메리트 이지 않을까 싶다.
지금은 코드의 길이가 짧고 출력만 하고 있어서 크게 와 닿지는 않는다. 하지만 덩치가 커질 수록 첫 번째 방법 보다는 두 번째 방법을 선호하게 될 듯 싶다.
설마 했지만...else문도 포함 시킬 수 있더라....?ㄷㄷ
if let else는 match문에서 "_"와 동일한 역할을 하지.
다음 코드를 보자.
let mut count = 0;
// 첫 번째 방법
match coin {
Coin::Quarter(state) => println!("State quarter from {:?}!", state),
_ => count += 1,
}
// 두 번째 방법
if let Coin::Quarter(state) = coin {
println!("State quarter from {:?}!", state);
} else {
count += 1;
}
흔하게 사용하는 if의 syntax와 비슷하여 내심 다행이라고 생각이 된다...ㅎㅎㅎ
반응형