質問: プロトタイプベースのオブジェクト指向言語は私の知る限り、JavaScriptぐらいしか広く使われているものはないんじゃないかと思います。 しかもJavaScriptもES6からclass構文というシンタックスシュガーを導入しましたし、altJSの一種のTypeScriptも広く使われていますし。 プロトタイプベースという概念を勉強している時に、「この概念、クラスベースと違って難しすぎね?」という感情を抱いていて、今もそれは変わらないです。 ただ勉強を進めているうちに、実はプロトタイプベースの方が概念としてはすごくシンプルで柔軟性があるのではないかという思いも募ってきました。 でも明らかにみんなプロトタイプベースでプログラミングをしたがっていませんよね?それどころかプロトタイプベースという概念を理解していない、しようともしていない人が多いように思います。JavaScriptの文脈で「クラスを作って、そのインスタンスを作る。」とかいう人までいますし。こういった説明は私のような初学者を混乱させるので本当にやめてほしいです。 JavaScript以外のSelfやLuaやIoといった他のプロトタイプベースのオブジェクト指向言語が広く使われていない理由で個人的に考えている理由は以下です。 * 単純に時代の流れ。たまたまクラスベースが流行っただけ。 * 概念的にクラスベースの方が優れているから。 * プロトタイプベースは良くも悪くも柔軟。クラスベースは良くも悪くもプログラマーを縛る。仕事をする上で後者の方が好都合だから。 ぶっちゃけやろうとしていることはどちらもあんまり変わらないし、こんなこと考えている暇があるならコード書いて何か物作れって話ですが、勉強している最中に疑問に思ったので質問しました。 参考文献 Object-oriented programming Self Prototype-based programming What does it mean that Javascript is a prototype based language? --- 以下補足です。 1.この質問はタイトルの通り、プロトタイプベースのオブジェクト指向言語が広く使われていない理由を聞いているものです。どちらの概念の方が優れているかといった質問ではないです。**宗教論争をするつもりは一切ありません。** 2.質問が質問ですし、究極的にはそれらの区別ができないのは分かっていますが、回答の際はできるだけ**明示的に事実と意見の区別**をしていただければ幸いです。 3.回答の際に参考文献を併せて明記していただけると助かります。 4.私が自分で載せた参考文献はもちろん読みましたが全部読んだ訳では無いので、「てめえの載せた参考文献に書いてあるだろうが読めや。」的な回答を、必要ならして頂けるとありがたいです。 --- 補足、修正は適宜行います。じゃんじゃんご指摘ください。ご回答よろしくお願いします。 --- **追記(5/31 4:13)** ベストアンサーは悩みましたが、sumimさんにしました。 使っている言葉は違うけど、言っていることに共通点があるというのは非常に面白いですね。 みなさんご回答ありがとうございました。非常にためになりました。
回答: 1つ間違いないところとして、「プロトタイプベースは静的型付け言語と相容れない」ということがあります。厳密な「型=クラス」を持たないプロトタイプベースでは、(Objective-Cのようにオブジェクト部分だけ動的に作ってしまうなら別として)静的型付けすることができなくなってしまいます。 あと、実はJavaScriptでも、高速化のために内部で**型推論**を行っています(Mozillaブログ)。プロトタイプベースであっても、結局内部で「型」という概念が登場するのなら、外からそれを扱えたほうが便利、という意味合いもあるのかもしれません。