"例外は、設計の逃げではなく、設計の覚悟である。"
例外処理は往々にして「雑に扱われがちな最後の手段」としてコードに埋め込まれる。
だがAdaにおいて、例外は**設計の一部であり、最後の砦ではなく「想定された補強」**である。
Adaの例外機構は、他の言語と同様に存在するが、その位置付けと使用思想は決定的に異なる。
Adaの例外は「補助線」である
Adaはコンパイル時検証を徹底する言語だが、それでも想定外の外部要因が存在する世界においては、例外が必要になる。
begin
Parse_Config_File;
exception
when Constraint_Error =>
Put_Line("Invalid configuration format.");
when others =>
Put_Line("Unknown failure occurred.");
end;
このように、例外処理は制御の中心ではなく、構造の末端に置かれる。
他の言語に見られる「例外依存構造」との決別
多くの言語では、try-catchで囲む前提で設計が進む。
これは、「正しさは保証できないが、失敗時に対応すればいい」という後手の思想である。
Adaは逆である。
まず正しく書け。正しさの外側だけを例外として扱え。
設計の補強としての例外使用
例外とは本来、「設計に取り込めなかった外界とのインタフェース」への備えである。
- I/Oエラー
- 不正なハードウェア状態
- OSとの不整合
こうした本質的に制御不能な要素に対してのみ、例外を使う。
SPARKとの分離:例外を許さない領域の設計
SPARK Adaでは、例外を言語機能として無効化している。
それは「完全に制御可能な領域のみを設計せよ」という思想から来ている。
つまり、SPARKでは例外の発生し得る構造自体を排除することで、検証可能性を保つ。
結語:例外は「無責任」ではなく「責任の補完」である
例外処理とは、バグの隠蔽ではない。
それは、**設計意図に入り込めなかった現実との「誠実な向き合い」**である。
Adaは例外を「制御フローの分岐」ではなく、設計の余白を守る囲いとして扱う。
"例外は、設計者が制御できなかった世界への、最後の礼節である。"