← 解説「panic! — 回復不能なエラー」に戻る
サンプルコードで身につける: panic! — 回復不能なエラー
解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。
1panic! を呼ぶとその場で停止する
panic! マクロを呼ぶと、メッセージを表示してプログラムがその場で止まることを最小構成で確認します。直前の println! までは実行されるので、出力から「どこまで進んで、どこで止まったか」が読み取れます。この例は5本の中で唯一、意図的に panic して異常終了します。
Rust
2添字アクセスの前に境界を確認する
Vec の範囲外アクセスは内部で panic を起こします。添字を使う前に len() と比較すれば、panic させずに「範囲外だった」というケースを通常の分岐として扱えます。実務では「panic しうる操作の前に条件を確認する」のが防御の基本形です。
Rust
3ゼロ除算を事前チェックで回避する
整数のゼロ除算も panic の代表例です。割る前に引数を検証して早期 return すれば、panic を起こさず正常に処理を続けられます。実務の計算ユーティリティでは、こうした入口での検証が定番です。
Rust
4HashMap のキーを確認してから取り出す
HashMap に存在しないキーを [] で参照すると panic します。contains_key で先に確認すれば、未登録のキーも通常の分岐として処理できます。設定値や在庫データの参照前チェックとして実務でよく出てくるパターンです。
Rust
5前提条件のガードとして使う
panic! は「ここに不正な値が来たら呼び出し側のバグ」という前提条件の表明として使います。割引率は 100% 以下という業務ルールをガードにしておけば、バグを早期に大きく失敗させて発見できます。この例のように正しい入力だけで呼べば、panic は一度も起きずに正常終了します。
Rust