クラス、値、型

「クラスは型である」は間違いである - SiroKuro Pageを読んで少し考えてみた。

とりあえず、私のボキャブラリでは「値」がないと型を説明できなかった。

まずは、値と型の関係を定義する。

  • すべての値は型をもつ
  • 型はその値に対する操作に制約を課す
  • 型はその値に対する操作を規定する

で、次のクラスの宣言が対応する型と、その制約を定義する。

  • クラスの宣言はそれと同じ名前を持つ型を定義する
  • クラスの宣言はそれが定義する型に許された操作を規定する

最後に、インスタンスがその型に属することを定義する。

  • クラスインスタンス生成式の評価結果である値は、その対象となるクラスの宣言が定義する型をもつ

普通の文脈だと、「クラス」って言う用語は「クラスの宣言」の意味でつかってて、「型(クラス型)」って言う用語は「クラスの宣言を指定するnominalな何か」の意味で使ってるイメージが強い(「たまにJavaScriptには型がない」という記述も見かける)。
なお、私は「クラス」「カインド」「ドメイン」をそれぞれ「型」に近い意味で使ってることがあります(それぞれちょっとずつニュアンス違いますけど)。なんかそんな感じでごっちゃになってるだけじゃないのかな、と思ったり。

クラスの宣言とクラス型がごっちゃになってるなら、どの辺に共通点があるのか知りたい。