시뻘건 개발 도전기

러스트 17 - if let 본문

프로그래밍/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와 비슷하여 내심 다행이라고 생각이 된다...ㅎㅎㅎ

 

반응형

'프로그래밍 > RUST' 카테고리의 다른 글

러스트 19 - Collections #2 : Hash Map  (0) 2019.03.31
러스트 18 - Collections #1 : Vector  (0) 2019.03.31
러스트 16 - 열거형 #2  (0) 2019.03.24
러스트 15 - 열거형 #1  (0) 2019.03.24
러스트 14 - 구조체 #2 : 메소드  (0) 2019.03.10
Comments