Rust における早期リターンによるエラー処理

Beginner

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

はじめに

この実験では、Rust でエラーを処理するための早期リターンの概念を検討します。サンプルコードは、match 文と早期リターンを使ってエラーを円滑に処理し、コードの読み書きを容易にする方法を示しています。また、明示的なエラー処理の制限についても説明し、パニックを起こすリスクなく値をアンラップする必要がある場合の ? 演算子の使用方法を紹介します。

注: 実験でファイル名が指定されていない場合は、好きなファイル名を使用できます。たとえば、main.rs を使用して、rustc main.rs &&./main でコンパイルして実行できます。

早期リターン

前の例では、コンビネータを使ってエラーを明示的に処理しました。このようなケース分析を行う別の方法は、match 文と 早期リターン を組み合わせることです。

つまり、エラーが発生した場合には、単に関数の実行を停止してエラーを返すことができます。この形式のコードは、読みやすさと書きやすさの両方において、一部の人にとってはより簡単です。前の例のこのバージョンを早期リターンを使って書き直したものを見てみましょう:

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 is {}", n),
        Err(e) => println!("Error: {}", e),
    }
}

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

この時点で、コンビネータと早期リターンを使ってエラーを明示的に処理する方法を学びました。一般的にはパニックを避けたいのですが、すべてのエラーを明示的に処理するのは面倒です。

次のセクションでは、単に unwrap するだけで panic を引き起こす可能性のない場合に ? 演算子を紹介します。

まとめ

おめでとうございます!早期リターンの実験を完了しました。スキルを向上させるために、LabEx でさらに多くの実験を行って練習してください。