ページ

2010年12月12日日曜日

JavaScriptの勉強:世界で最も誤解されたプログラミング言語

JavaScript再紹介からのリンクで。

誤解の元になった点、および現在進行中のまずいところのリストになっています。2001年段階での情報ですね。いまでは変わって来ている点もあるかと思います。やはりGoogleMapも出現、JSの歴史的には大事件だったと思います。

その名前

Javaなんて名乗っていながらJavaとは全く別物ですからね。最初にこんな名前を付けた奴は切腹ものでしょう。

Cの皮を被ったLisp

これは言い得て妙、でしょう。実行制御系はCのような言語系統ですが、オブジェク管理、特にメソッド管理のあたりはLisp風ですね。他の部分は難なく理解できるのですが。メソッド管理のあたりが実に難解です。

固定概念

確かにWEBブラウザ以外でJavaScript使おうという人は滅多にいませんでしたからね。しかしnodejsみたいなもの出てきていますので、このあたりも様変わりしてきていると思います。

定まらぬ目標

この筆者、かなりECMA委員会をくさしていますね。言語仕様の変遷までは追っていませんのでなんとも言いがたいのですが、委員会ベースの決定というのは、しかも自分らが実装するのではなければ、無責任になんでも取り込みたがるものではないでしょうか。

設計ミス

この点についてもECMA委員会を叩いていますね(彼らは新しい問題を作る方により興味があるのでしょう)。やり過ぎな感じの自動変換は全く同意します。他の部分については困るほど使い込んでいませんので、なんともいえませんが、エラーを出し易いというところは同意です。ですが外部ツールとしてリントがあるのですか。そういうのと組み合わせればなんとかあるかも知れません。が、このページからの紹介リンクはリンク切れになっています。今は専用サイト持っているのですね。ですが、DOMなんかへの参照があってもきちんと検証できるものなのでしょうか?

まずい実装

全く初期の実装はひどいものでした。私なんかは相当長い間、ブラウザのJSはオフにしたままでいました。下手にJS走らせるとブラウザが固まってしまうことが多かったので(普通と違う環境でしたから)。

ひどい書籍

まあ、どうみてカスな本が大量に出まわっていましたね。筆者おすすめは2冊だけ、ですが、英語版の改定版を読んだ人の話では「Dynamic HTML」の方は消えてオライリーの「JavaScript」だけになっているそうです。Dynamic HTML本の方はDOM周りの仕様改訂について行けなくなったのでしょう。書籍だけでなくWEBページのJSの解説もなかなかいいものは見つかりませんね。こうすれば動くよ、レベルの超入門レベルか、これすげーだろう、といった変態コード自慢の両極端に偏っています。

標準以下の標準

筆者本当にECMA委員会嫌っていますね。「ECMAとTC39委員会は、深く反省するべき」だそうで。ひょっとして公式仕様書って、ECMA委員会委員会を恨みたくなるようなものなのでしょうかね。

アマチュア

これも変わってきていそうですが。JSの再評価に繋がったGoogleMap出現が2005年ですから、それ以前の記事としてはアマチュアばっかり、という感じだったのでしょう。今ではプロユースになってきていると思います。

オブジェクト指向

まあ、何を以てオブジェクト指向というかは人それぞれですからね。JSも本格的に使われるようになってからはオブジェクト指向言語と認められるようになっています。BUZZWORD的にいうとプロトタイプベースのオブジェクト指向、だそうです。以下翻訳ベースで。

一般にオブジェクトシステムの構成方式には、継承(inheritance (is-a) )、または、集約(aggregation (has-a))があります。JSでは両方可能なのですが(知らなかった)に、JSの動的な特性から明らかなように集約が優先して使われています(ほぼこちらしか見受けません)。

JSがちゃんとしたOO言語ではない、という批判があります。ひとつは、JSには情報隠蔽の仕組みが用意されていない、という点についえの批判です。通常のJSでのオブジェクト構成では、すべてのメンバがパブリックになってしまい、プライベート変数、メソッドを持たせることができない、というものです(実際、普通に見かける解説では見たことがありません)。しかし、実際にはJSでもプライベート変数、メソッドを持たせることができます[こちらのページで解説]。

補足:
上のリンク先ページでは、JSのクロージャ機能を使うことによってプライベート変数、メソッドを持たせる手法が解説されています。確かに可能にはなっていますが、なんか成り行きで使用可能になっているように見受けられます。他のOO言語のようなきちんと設計されたものとはレベルが違っています。

もうひとつの批判はちゃんとした継承機能を持っていないという点についてです。しかし、実際にはJSには古典的な継承だけでなく、他のコード再利用パターンも用意されています

補足:
こちらのリンク先では、prototype チェインを使った継承(単一、多重)が解説されています。これも、なるほど可能になっていますが、いかにも無理矢理感ただよう実装です。可能であるからOO言語、っていうのは相当に無理があると思いますがね。このレベルでOOサポートと称するのであれば、Cだって、ASMだってOO言語ということになってしまいます。ただ、リンク先に出ているサポート用の4関数、inherits、method、uber、swiss、は結構色々なシチュエーション(それこそ本来のOO機能が要求された時)で使いでがありそうです。

0 件のコメント:

コメントを投稿