0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Adaにおける例外処理:制御ではなく設計の補強として

Posted at

"例外は、設計の逃げではなく、設計の覚悟である。"

例外処理は往々にして「雑に扱われがちな最後の手段」としてコードに埋め込まれる。
だが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は例外を「制御フローの分岐」ではなく、設計の余白を守る囲いとして扱う。

"例外は、設計者が制御できなかった世界への、最後の礼節である。"

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?