constructor
「〇〇constructor」と言うと、〇〇を作り出すもののことを指す
引数は取ったり取らなかったりする
例えば、Haskellには
がある
値コンストラクタは、0個以上の引数を取って値を作り出す
Haskellの場合は、引数は値
値コンストラクタ :: 引数の値 -> 作り出した値
のイメージ
例えば、 Just
は値コンストラクタ
1つの値を引数にとって、値を作り出す
例えば、 1
という値を引数にとって、 Just 1
という値を作る
Just
自体は値ではないことに注意
引数を取らないものもある
例えば、 None
0個の値を引数にとって、値を作り出す
故に、実質的に None
は値コンストラクタであり、値でもある
型コンストラクタは、0個以上の引数を取って型を作り出す
Haskellの場合は、引数は型
型コンストラクタ :: 引数の型 -> 作り出した型
のイメージ
例えば、 Maybe
は型コンストラクタ
1つの型を引数に取って、型を作り出す
例えば、 Int
という型を引数にとって、 Maybe Int
という型を作る
Maybe
自体は型でないことに注意
引数を取らないものもある
例えば、 Int
でもこれのことをわざわざ「型コンストラクタ」と言うことは殆どないと思う
OOPのclassのconstructorは?
instanceを生成するので、同じように呼ぶなら「instance constructor」と呼べる
0個以上の値を引数にとって、instanceを作り出す
例えば、
tsconst hoge = new Hoge(42);
class Hoge {
constructor(n: number) {
...
}
}
この constructor
は1つの値を引数にとって、 Hoge
instanceを生成する
classを作っているわけではないよね

instanceを作っている
でもOOP言語の文脈で「constructor」と言えば、これ以外に指すものがないので、
わざわざ「instance constructor」とは言わずに、
単に「constructor」と呼ばれる