読者です 読者をやめる 読者になる 読者になる

「プロトタイプベース」というのはいったいなんなのか

http://d.hatena.ne.jp/shinichiro_h/20061218

とりあえず「オブジェクト=ディクショナリなのがプロトタイプベースで,オブジェクト=レコードなのがクラスベース」ということではどうか,と言ってみました.ディクショナリはキーの追加や削除や列挙がありますが,レコードにはない,という感じの定義で.ディクショナリは空のをコピーしてからいろいろすれば良いですが,レコードはコンストラクタで生成することしかできません.

でもまあ,とりあえず私の興味は型がどうなるかということだけで,上のような分類をするとなにがうれしいかというと,レコードに型を付ける話はかなり研究されているので,クラスベースはわりと簡単にオブジェクトに型が付くだろうという点です.逆にディクショナリに型を付けるのは直感的に難しそうなので,素人は手を出しちゃいけないということになります.

上の定義だと,C++JavaはクラスベースになってJavaScriptはプロトタイプベースになるので,かなり上手く近似できているかと思ったのですが,id:shinichiro_hさんにとりあえず「Rubyはどっちなんだよ」とか言われました.メソッド定義には「def」という特別な構文を使う時点で,クラスベースに分類できそうですが,まあ厳密な議論は保留にするのが良いんじゃないかと思います.一応,どこにでもdefを書けるわけではないとかの理由で,クラスベースで良いんじゃないかと思いますが.