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を作り出す
例えば、
code:ts
const hoge = new Hoge(42);
class Hoge {
constructor(n: number) {
...
}
}
このconstructorは1つの値を引数にとって、Hogeinstanceを生成する
classを作っているわけではないよねmrsekut.icon
instanceを作っている
でもOOP言語の文脈で「constructor」と言えば、これ以外に指すものがないので、
わざわざ「instance constructor」とは言わずに、
単に「constructor」と呼ばれる