Rust while let 을 활용한 간결한 옵션 반복

Beginner

This tutorial is from open-source community. Access the source code

소개

이 실습에서는 Rust 에서 while let의 사용법을 보여줍니다. while let은 변수를 증가시키거나 Option 타입을 반복할 때 match 문열을 사용하는 것보다 더 간결하고 효율적인 대안입니다.

참고: 실습에서 파일 이름을 지정하지 않으면 원하는 파일 이름을 사용할 수 있습니다. 예를 들어 main.rs를 사용하고 rustc main.rs && ./main으로 컴파일 및 실행할 수 있습니다.

while let

if let과 유사하게 while let은 번거로운 match 문열을 더 쉽게 처리할 수 있도록 합니다. 다음은 i를 증가시키는 예시입니다.

// `optional` 을 `Option<i32>` 타입으로 만듭니다.
let mut optional = Some(0);

// 반복적으로 테스트합니다.
loop {
    match optional {
        // 만약 `optional` 이 분해되면, 블록을 평가합니다.
        Some(i) => {
            if i > 9 {
                println!("9 보다 크므로 종료!");
                optional = None;
            } else {
                println!("`i` 는 `{:?}` 입니다. 다시 시도합니다.", i);
                optional = Some(i + 1);
            }
            // ^ 3 개의 들여쓰기가 필요합니다!
        },
        // 분해에 실패하면 루프를 종료합니다.
        _ => { break; }
        // ^ 왜 이렇게 해야 할까요? 더 나은 방법이 있어야 합니다!
    }
}

while let을 사용하면 이 코드를 훨씬 더 간결하게 작성할 수 있습니다.

fn main() {
    // `optional` 을 `Option<i32>` 타입으로 만듭니다.
    let mut optional = Some(0);

    // 이 코드는 " `optional` 을 `Some(i)` 로 분해할 때까지 블록 (`{}`) 을 평가하고, 그렇지 않으면 `break` 합니다."를 의미합니다.
    while let Some(i) = optional {
        if i > 9 {
            println!("9 보다 크므로 종료!");
            optional = None;
        } else {
            println!("`i` 는 `{:?}` 입니다. 다시 시도합니다.", i);
            optional = Some(i + 1);
        }
        // ^ 오른쪽으로의 들여쓰기가 줄어들고, 실패하는 경우를 명시적으로 처리할 필요가 없습니다.
    }
    // ^ `if let`에는 추가적인 `else`/`else if` 절이 있었습니다. `while let`에는 이러한 절이 없습니다.
}

요약

축하합니다! While Let 실습을 완료했습니다. LabEx 에서 더 많은 실습을 통해 기술을 향상시킬 수 있습니다.