2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

エラー処理ではなく失敗設計:例外の哲学的再考

Posted at

"例外とは、逃げではない。設計に取り込めなかった現実との向き合い方だ。"

一般的なプログラミングにおける例外処理は、「何か起きたら考える」ための後始末として機能する。
だがAdaにおける例外処理は、それとはまったく異なる位置づけを持っている。

エラーは“処理”されるべきではない。構造の中で“発生し得ない”ように設計されるべきである。
その上で、現実の“設計が及ばない不確実性”にだけ、例外が許される。


Adaの基本設計思想:「あり得ないことは書かせない」

Adaでは、設計段階で「発生しうる異常」を構文的に排除することが第一原則である。
たとえば、ゼロ割は以下のように契約(Pre)で除外される。

function Divide (A, B : Integer) return Integer
  with Pre => B /= 0;

この設計において、例外は設計漏れの代償ではなく、現実との折り合いである。


例外とは“設計に入れられなかった現象”への礼節

例えば、外部ファイルが存在しない、通信が遮断される、センサが沈黙する——
これらはプログラム内部で完結できない不確定性である。

Adaはこれらに対し、明示的な例外ハンドリングを要求する。

begin
   Open_File (Config);
exception
   when Name_Error =>
      Put_Line("設定ファイルが存在しません。");
end;

この例外処理は「想定外の事態」ではなく、“設計内で許容した”唯一の逸脱である。


SPARKとの断絶:例外なき世界の哲学

SPARKでは、例外は禁止されている
これは、設計者があらゆる不確実性を排除した“閉じた世界”を構築することを強制されるということ。

例外がないというのは、「ミスが起きない」ことではない。
ミスが起きる余地そのものを構造から削ぎ落とす設計を意味する。


エラー処理から失敗設計へ

現代の多くのプログラムは、try-catchにすべてを託してしまう。
しかし、それは「動くように見えるだけの不安定な構造」でしかない。

Adaはそこに対して、明確な設計上の態度を示す。
設計で避けられる失敗は、絶対に構文で潰せ。
それでも起き得ることに対してのみ、静かに例外を許せ。


結語:例外は、設計が見落とした現実の境界線である

Adaは、例外を「処理」ではなく「構造の外」に位置づける。
それは、設計者の“想定と責任の限界”を明示する枠組みなのだ。

"例外は設計者の責任ではない。だが、例外の存在を許す設計は、誠実でなければならない。"

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?