"再利用とは、曖昧を許さずに一般化することだ。"
多くの言語において、再利用性と安全性はトレードオフとされる。
「汎用的な構造」を作れば、「型の曖昧さ」が避けられなくなる——そんなジレンマを、Adaは断ち切る。
Adaにおける generic は、単なるテンプレートではない。
厳密な契約と型指定による、安全性の上に成り立つ再利用構造である。
汎用性の中に、型の秩序を
Adaでは、型・値・サブプログラムを「パラメータ」として汎用化できる。
しかし、そこには明確な制約が付く。
generic
type Element_Type is private;
with function "<" (Left, Right : Element_Type) return Boolean is <>;
package Generic_Sort is
procedure Sort (A : in out Array_Type);
end Generic_Sort;
この構文は、「比較可能なElement_Type」という前提を明示して再利用可能にする。
自由ではあるが、無秩序ではない。
型制約付きの汎用パッケージ設計
generic
type Item is range <>;
Default : Item;
package Counter is
function Next(X : Item) return Item;
end Counter;
これは、任意の範囲型に対して適用可能な汎用カウンターであり、
整数型に限定した上で、汎用的に機能を提供する例である。
ジェネリクスで崩れることのない堅牢性
他の言語では、「型を渡すことでコンパイルエラーが見えなくなる」ことがある。
Adaでは、型制約によって**「何ができて、何ができないか」を構文上保証**するため、
曖昧な挙動や破壊的依存関係が生じにくい。
一般化=抽象化ではない。文脈の制約と共にあれ
Adaのgenericは「どんな場合にも使えるもの」ではない。
**「この文脈で使えるように設計されたもの」**として定義される。
それゆえに、再利用は制限される代わりに、明快で予測可能であり、
「汎用性という名の破壊」を避ける。
結語:再利用とは、秩序の複製である
再利用できるコードとは、意味と制約が明確に記述されているものである。
汎用性と安全性は本来矛盾しない——その設計的証明が、Adaのgenericである。
"再利用とは、正しさの定型化である。"