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におけるサブタイプ(subtype)とレンジ型(range)の持つ哲学的・構造的意義を探る。


範囲を定めることで、誤りを定めない

プログラムの不具合の多くは、「本来来ないはずの値」が来ることで発生する。
Adaはこの問題に対して、設計時に「来るべき値」しか存在し得ない構造を作る。

subtype Score is Integer range 0 .. 100;

この一行で、0〜100以外の値を受け取る余地が、文法的に消える。
不正な値が来る可能性そのものを、構文段階で封じるのだ。


サブタイプは設計者の意志を表す構造

Adaにおけるsubtypeは、単なる型の再定義ではない。
それは「文脈における有効値の定義」であり、意味論的な明示である。

type Temperature is range -273 .. 1000; -- 絶対零度を下回らない
subtype Celsius is Temperature range 0 .. 100;
subtype Kelvin is Temperature range 273 .. 373;

ここには、物理法則への忠実さ文脈ごとの値制限が自然に反映される。


実行時ではなく設計時に「止まる」ことの美しさ

多くの言語では、制約は実行時の例外やエラーハンドリングで対応する。
しかしAdaでは、「最初に止まる」ことが美徳である。

type Age is range 0 .. 120;
My_Age : Age := -3; -- コンパイル時に拒否

このようにして、設計の意図を未来の実行ではなく、現在の構文で語る。


設計は「意志の構文」である

Adaのsubtype/range構造は、設計者の意図を静的に定義し、文法上の保証へと昇華する。
これは単なる「型の厳密さ」ではなく、仕様書を書かずに設計思想を伝える手段でもある。


結語:制約の先にある自由

自由とは、無制限ではない。
設計された制限の中で初めて、コードは意味を持った構造体として立ち上がる

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?