構造体、列挙型、トレイト

Rust Option: Some and None

Rust has no null. A value that may be missing is an Option, and the compiler makes you handle None.

  • 中級
  • 約3分で読めます
  • 実行できるサンプル 1 件
学べること
  • Some(value) and None
  • match and unwrap_or
  • map on an Option
find_user(id)
Some
  • id 1 → Some("Ada")
  • use the name
None
  • id 3 → None
  • handle the missing case

A value that may be missing

Rust has no null. A value that may be missing has the type Option<T>, which is either Some(value) or None. The compiler makes you handle the None case before you can use the value.

find_user returns Some for a known id and None otherwise, and match handles both. unwrap_or supplies a default when the value is missing. map changes the value inside Some and leaves None alone.

重要なポイント

  1. Option<T> is Some(value) or None.
  2. unwrap_or gives a default.
  3. map changes the value inside Some.

実行できる Rust のサンプル

Rust
コードを実行 →
main.rs
fn find_user(id: u32) -> Option<&'static str> {
    match id {
        1 => Some("Ada"),
        2 => Some("Linus"),
        _ => None,
    }
}

fn main() {
    for id in [1, 3] {
        match find_user(id) {
            Some(name) => println!("user {id}: {name}"),
            None => println!("user {id}: not found"),
        }
    }

    let name = find_user(9).unwrap_or("guest");
    println!("{name}");

    let length = find_user(2).map(|name| name.len());
    println!("{:?}", length);
}
この例の実行ボタンを作成 実行結果
user 1: Ada
user 3: not found
guest
Some(5)

練習

サンプルをオンラインコンパイラーで開き、値を変えたり行を追加したりして、実行する前に出力を予想してみましょう。次に、わざとコードを壊してコンパイラーのメッセージを読んでみてください。

このレッスンを終えましたか?

学習済みにすると進み具合を記録できます。

チャレンジで練習する

このレッスンの内容を使って実際の問題を解きましょう。各チャレンジはブラウザで動き、すぐにテストされ、AI のレビューも受けられます。

すべてのチャレンジ