🦀

Rust初心者のためのResult型とOption型

2023/08/10に公開

ResultOption入門

この記事では、Rust初心者向けに ResultOption について解説しています。

概要

Rustプログラミング言語では、成功と失敗値の存在と欠如 を扱うために、ResultOptionという2つの強力な概念が提供されています。
この2つは列挙型(enum)になり、コードの堅牢性と可読性を高める役割を果たし、エラー処理と値の取り扱いをより明確にします。
この記事では、これらの概念の基本的な使い方と理解を初心者に向けて解説します。

https://zenn.dev/keisuke333/articles/729d8da86c27ef

目次

Result

Result型は、成功した場合エラーが発生した場合 の2つの結果を表します。

Result<T, E>

T型は成功値、E型はエラー値になります。

成功と失敗の表現

fn divide(numerator: f64, denominator: f64) -> Result<f64, &'static str> {
    if denominator != 0.0 {
        Ok(numerator / denominator)
    } else {
        Err("Cannot divide by zero")
    }
}

let result = divide(10.0, 2.0);
match result {
    Ok(value) => println!("Result: {}", value),
    Err(err) => println!("Error: {}", err),
}

https://doc.rust-lang.org/std/result/enum.Result.html

Option

Option型は、値が存在するかどうか を表します。

Option<T>

T型は存在する値、Noneは値がないことを示します。

値の存在と欠如

fn find_even_number(numbers: &[i32]) -> Option<i32> {
    for &number in numbers {
        if number % 2 == 0 {
            return Some(number);
        }
    }
    None
}

let numbers = [1, 3, 5, 7];
let result = find_even_number(&numbers);
match result {
    Some(even_number) => println!("Even number: {}", even_number),
    None => println!("No even number found"),
}

https://doc.rust-lang.org/stable/std/option/enum.Option.html

ResultOptionのメソッド

これらの型は、メソッドチェーンを通じてエラーハンドリングを簡素化します。

let result: Result<i32, &'static str> = Ok(42);
let doubled_result = result.map(|n| n * 2);
let option: Option<i32> = Some(42);
let doubled_option = option.map(|n| n * 2);

https://doc.rust-lang.org/stable/std/result/enum.Result.html#method.map
https://doc.rust-lang.org/stable/std/option/enum.Option.html#method.map

まとめ

  • Result
    成功値とエラー値の両方を表現します。エラーハンドリングに使用されます。
  • Option
    値の存在または欠如を表します。値がない可能性がある場合に使用されます。

これらの概念は、Rustプログラミングにおいて非常に中心的で、効果的なコードの記述に不可欠です。この記事がResultOptionの基本的な理解の助けとなることを願っています。

Discussion