RustのOption列挙型によるエラー処理

RustRustBeginner
今すぐ練習

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

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Rust の Option<T> 列挙型について学びます。この列挙型は、プログラムでのエラー処理や値の欠如を扱うために、2 つのバリアント (NoneSome(value)) を提供します。

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/MemorySafetyandManagementGroup(["Memory Safety and Management"]) rust(("Rust")) -.-> rust/DataStructuresandEnumsGroup(["Data Structures and Enums"]) rust(("Rust")) -.-> rust/AdvancedTopicsGroup(["Advanced Topics"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/DataTypesGroup -.-> rust/integer_types("Integer Types") rust/DataTypesGroup -.-> rust/type_casting("Type Conversion and Casting") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/MemorySafetyandManagementGroup -.-> rust/lifetime_specifiers("Lifetime Specifiers") rust/DataStructuresandEnumsGroup -.-> rust/method_syntax("Method Syntax") rust/AdvancedTopicsGroup -.-> rust/operator_overloading("Traits for Operator Overloading") subgraph Lab Skills rust/variable_declarations -.-> lab-99256{{"RustのOption列挙型によるエラー処理"}} rust/integer_types -.-> lab-99256{{"RustのOption列挙型によるエラー処理"}} rust/type_casting -.-> lab-99256{{"RustのOption列挙型によるエラー処理"}} rust/function_syntax -.-> lab-99256{{"RustのOption列挙型によるエラー処理"}} rust/expressions_statements -.-> lab-99256{{"RustのOption列挙型によるエラー処理"}} rust/lifetime_specifiers -.-> lab-99256{{"RustのOption列挙型によるエラー処理"}} rust/method_syntax -.-> lab-99256{{"RustのOption列挙型によるエラー処理"}} rust/operator_overloading -.-> lab-99256{{"RustのOption列挙型によるエラー処理"}} end

Option

プログラムの一部のエラーをキャッチして、panic! を呼び出さないことが望ましい場合があります。これは、Option 列挙型を使用して達成できます。

Option<T> 列挙型には 2 つのバリアントがあります。

  • None は、エラーまたは値の欠如を示します。
  • Some(value) は、型 Tvalue をラップするタプル構造体です。
// `panic!` しない整数の除算
fn checked_division(dividend: i32, divisor: i32) -> Option<i32> {
    if divisor == 0 {
        // エラーは `None` バリアントで表されます
        None
    } else {
        // 結果は `Some` バリアントにラップされます
        Some(dividend / divisor)
    }
}

// 成功しない可能性のある除算を処理するこの関数
fn try_division(dividend: i32, divisor: i32) {
    // `Option` 値は、他の列挙型と同じようにパターンマッチできます
    match checked_division(dividend, divisor) {
        None => println!("{} / {} failed!", dividend, divisor),
        Some(quotient) => {
            println!("{} / {} = {}", dividend, divisor, quotient)
        },
    }
}

fn main() {
    try_division(4, 2);
    try_division(1, 0);

    // `None` を変数にバインドするには、型注釈が必要です
    let none: Option<i32> = None;
    let _equivalent_none = None::<i32>;

    let optional_float = Some(0f32);

    // `Some` バリアントをアンラップすると、ラップされた値が抽出されます。
    println!("{:?} unwraps to {:?}", optional_float, optional_float.unwrap());

    // `None` バリアントをアンラップすると `panic!` します
    println!("{:?} unwraps to {:?}", none, none.unwrap());
}

まとめ

おめでとうございます!あなたは Option の実験を完了しました。あなたの技術を向上させるために、LabEx でさらに多くの実験を行って練習してください。