作者: 機械伯爵
日時: 2007/10/9(13:57)
「言うまでもなく、継承の概念をサポートしない言語機能は”クラス” 
と呼ぶに値しません。」〜『Python チュートリアル』by Guido van Rossum〜

 ……いや、公平に言えば、アラン・ケイは継承とか多態性とか、言って
なかったんだけどなぁ……

> >  継承という楽しみ/手抜きが出来ないのは、そのへん辛いです。
> 
> var Klass = function();
> Klass.prototype = new Super();
> Klass.prototype.hoge = function() {
> };
> Klass.prototype.fuga = function() {
> };
> 
>   がそんなにイヤだと。

 匿名関数をオブジェクトとしてつっこむのは、なかなかナイスな書き方
ですし、私も好きです。

 が、それが強要されるのはイヤだなぁ。

※フツーに書くときは、私だってクラス定義の中でメソッドを定義
 します。

> Klass.hoge = function() {
> };
> Klass.fuga = function() {
> };
> 
>   でもいいわけですが、それもイヤだと。

「きらいになれない〜でもじゅうぶんじゃない〜」(by 『魔法騎士レイアース』)

 そう書けるのは愉快(そうやって書けないJavaよりはもちろん)ですが、それ
がスタンダードなのはやっぱ居心地が悪いっす。

>   というかプロパティをコピーしまくる関数一つ書けばいいんですけどそれも
> イヤだと。

 んだから、やろうと思えば出来ますが、そこまでやるなら、なんで最初から
継承させてくんないのか、と言いたいわけです。

 必要ならやりますし、JavaScript習い始めた頃はやりましたよ、ええ。

※私は先にJavaを覚えたので……あの頃はまだ、Pythonを知らなかったんだ
 よなぁ。

>   まぁイヤなのはいいんですけど、「継承できない」とあまり声高に言われる
> となんだかなぁという感じが…。だって継承っていう概念がないんだからでき
> るわけないし、でも似たようなことはできるので「継承できないから嬉しくな
> い」というのもちょっと外れている気もするんですよねぇ。

 継承の概念が無い、ということは、継承に価値を見出していない、ということ
ですよね。

 だって、同じことが出来るなら、シンタックスシュガーを書くだけです
から。

 私はそれも、一理あるとは思います。
 多重継承でなくとも、継承によって隠蔽されることによる問題は少なくない
でしょうから。

 言語機能として『できない』という言葉が、よもや『実装した技術者が
技術的な限界で』と解釈する人は、まずいないでしょう。

 とすると積極的に「できない」わけですから、その意味は「継承という
テクニックを前提としていない、あるいは推奨していない」言語ですよね。

 その哲学に「そーかな、便利だし、見やすくもできるんだけどなー」とか
思うのだけです。

 でもまぁ、繰り返しになりますが、クラス/オブジェクトを学習するのに、
JavaScriptはやめたほうが良いでしょう……ってトコぐらいですかねぇ。

 /機械伯爵/