Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

조기 리턴

이전 예제에서 우리는 콤비네이터를 사용하여 에러를 명시적으로 처리했습니다. 이러한 케이스 분석을 처리하는 또 다른 방법은 match 문과 *조기 리턴(early returns)*을 조합하여 사용하는 것입니다.

즉, 에러가 발생하면 단순히 함수의 실행을 멈추고 에러를 반환할 수 있습니다. 어떤 이들에게는 이런 형태의 코드가 읽고 쓰기에 더 쉬울 수 있습니다. 이전 예제를 조기 리턴을 사용하여 다시 작성한 버전을 살펴보세요:

use std::num::ParseIntError;

fn multiply(first_number_str: &str, second_number_str: &str) -> Result<i32, ParseIntError> {
    let first_number = match first_number_str.parse::<i32>() {
        Ok(first_number)  => first_number,
        Err(e) => return Err(e),
    };

    let second_number = match second_number_str.parse::<i32>() {
        Ok(second_number)  => second_number,
        Err(e) => return Err(e),
    };

    Ok(first_number * second_number)
}

fn print(result: Result<i32, ParseIntError>) {
    match result {
        Ok(n)  => println!("n은 {}입니다", n),
        Err(e) => println!("에러: {}", e),
    }
}

fn main() {
    print(multiply("10", "2"));
    print(multiply("t", "2"));
}

지금까지 우리는 콤비네이터와 조기 리턴을 사용하여 에러를 명시적으로 처리하는 방법을 배웠습니다. 일반적으로 패닉은 피하고 싶지만, 모든 에러를 명시적으로 처리하는 것은 번거로운 일입니다.

다음 섹션에서는 panic을 일으키지 않고 단순히 unwrap이 필요한 경우를 위한 ?를 소개하겠습니다.