クラス、値、型
「クラスは型である」は間違いである - SiroKuro Pageを読んで少し考えてみた。
とりあえず、私のボキャブラリでは「値」がないと型を説明できなかった。
まずは、値と型の関係を定義する。
- すべての値は型をもつ
- 型はその値に対する操作に制約を課す
- 型はその値に対する操作を規定する
で、次のクラスの宣言が対応する型と、その制約を定義する。
- クラスの宣言はそれと同じ名前を持つ型を定義する
- クラスの宣言はそれが定義する型に許された操作を規定する
最後に、インスタンスがその型に属することを定義する。
- クラスインスタンス生成式の評価結果である値は、その対象となるクラスの宣言が定義する型をもつ
普通の文脈だと、「クラス」って言う用語は「クラスの宣言」の意味でつかってて、「型(クラス型)」って言う用語は「クラスの宣言を指定するnominalな何か」の意味で使ってるイメージが強い(「たまにJavaScriptには型がない」という記述も見かける)。
なお、私は「クラス」「カインド」「ドメイン」をそれぞれ「型」に近い意味で使ってることがあります(それぞれちょっとずつニュアンス違いますけど)。なんかそんな感じでごっちゃになってるだけじゃないのかな、と思ったり。
クラスの宣言とクラス型がごっちゃになってるなら、どの辺に共通点があるのか知りたい。