Dev Study
← 解説「Option<T> — null の代わり」に戻る

サンプルコードで身につける: Option<T> — null の代わり

解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。

1Some と None を match で受ける

Option<i32> の変数に Some(7) と None をそれぞれ入れて、match で両方のケースを処理する最小の例です。「値があるかもしれない」が型として表現され、Some と None の両方を書かないとコンパイルが通りません。この強制こそが null チェック忘れを防ぐ仕組みです。

Rust

2失敗しうる計算を Option で返す

0 で割れないケースを None、計算できたケースを Some で返す関数です。前のレッスンでは panic か早期 return しかありませんでしたが、Option なら「結果がない」こと自体を戻り値として呼び出し元に渡せます。失敗を値として扱うのが Rust 流のエラー設計の出発点です。

Rust

3Vec の get — panic しない添字アクセス

添字の [] アクセスは範囲外で panic しますが、get メソッドは同じ操作を Option で返すので panic しません。範囲外は None として通常の分岐で処理できます。前レッスンの「境界を事前チェック」を、戻り値の型で表現し直した形です。

Rust

4HashMap の get で安全に検索する

HashMap の get はキーが見つかれば Some(値への参照)、なければ None を返します。コレクションのレッスンで触れた「存在しないキーの [] は panic」という問題への、標準ライブラリの公式な答えが Option です。実務の設定値やキャッシュの参照はほぼこの形になります。

Rust

5構造体の「未設定かもしれない」フィールド

ニックネームのような任意項目は、構造体のフィールドを Option<String> にして表します。if let と else を組み合わせれば「設定されていれば使い、なければ本名で代用」というフォールバックが素直に書けます。ユーザープロフィールや設定画面の表示処理など、実務で最も頻出する Option の使い方です。

Rust