サンプルコードで身につける: Option<T> — null の代わり
解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。
1Some と None を match で受ける
Option<i32> の変数に Some(7) と None をそれぞれ入れて、match で両方のケースを処理する最小の例です。「値があるかもしれない」が型として表現され、Some と None の両方を書かないとコンパイルが通りません。この強制こそが null チェック忘れを防ぐ仕組みです。
2失敗しうる計算を Option で返す
0 で割れないケースを None、計算できたケースを Some で返す関数です。前のレッスンでは panic か早期 return しかありませんでしたが、Option なら「結果がない」こと自体を戻り値として呼び出し元に渡せます。失敗を値として扱うのが Rust 流のエラー設計の出発点です。
3Vec の get — panic しない添字アクセス
添字の [] アクセスは範囲外で panic しますが、get メソッドは同じ操作を Option で返すので panic しません。範囲外は None として通常の分岐で処理できます。前レッスンの「境界を事前チェック」を、戻り値の型で表現し直した形です。
4HashMap の get で安全に検索する
HashMap の get はキーが見つかれば Some(値への参照)、なければ None を返します。コレクションのレッスンで触れた「存在しないキーの [] は panic」という問題への、標準ライブラリの公式な答えが Option です。実務の設定値やキャッシュの参照はほぼこの形になります。
5構造体の「未設定かもしれない」フィールド
ニックネームのような任意項目は、構造体のフィールドを Option<String> にして表します。if let と else を組み合わせれば「設定されていれば使い、なければ本名で代用」というフォールバックが素直に書けます。ユーザープロフィールや設定画面の表示処理など、実務で最も頻出する Option の使い方です。