著作一覧 |
以前、理想のJavaScript入門書として、テスト駆動JavaScriptを取り上げたことがあったが、おれにとってはJavaScriptの入門書かも知れないが、初心者の役には立たないだろうというツッコミを何人かからもらって、うむ、それはそうだなぁと気にしていた。
先日、アスキーの鈴木さんから同じシリーズ(アスキー黒い本)の『オブジェクト指向JavaScript』をもらったので、これはどうかなぁと読んだ。練習問題は解いてないけど(一部解いた)、完読したので、紹介する。
著者は、Stoyan Stefanovで、Yahooの人。Yahooの人なのでレビュアーにはダグラス・クロフォード(JSONの人。JavaScriptのご意見番的存在)が入っている。ということで、技術的におかしなことが書いていることはあり得ないなということはわかる。
初心者用としては、多分、もっと猫でもわかるような本はあるかも知れないとは思うし、一部わけわからない書き方している箇所もあったが、これなら良いのではないかなぁと思う。ページ数は350ページ弱。厚すぎず薄すぎずというところ。
内容は、次の通り。
第1章
・オブジェクト指向プログラミング言語の特性についての簡潔な説明から始まる。人-おっさん-技術者みたいな例だが、それを引きずるわけではなく、6章「継承」ではShape >- Rectangle >- Squareなどを使ったサンプルでcanvas描画をしたりするので、ありでしょう。
・カプセル化とデータ隠蔽はきっちりと分けているので好感度高。
・集約-継承-ポリモーフィズムの順なのも良い。
・実行環境はFirebugをアドオンしたFirefox(どこかで話題になっていたような)
・ただし、IE9とChrome、Safariについても一応説明あり。
第2章
・制御構文、データ型など
・プリミティブとオブジェクトについてきちんと説明してある。
・セミコロンをちゃんと書けといったベストプラクティスがところどころにあるのが良い。
+追記:この本の良い点として、比較的スルーされてしまうのだが、実際に使い始めるとひっかかってくるものについて丹念に説明していることもあげられる。この章だとtypeofやdelete、それになんといってもnullとundefined。多分、最初に読んでいるときは実際に打ち込んでも、ふーんで終わると思う。でも本当のプログラミング/デバッグを始めると間違いなくぶつかることになり、そういう時に読み直せば、すぐに期待している答を見つけられる本だと思う。
第3章
関数について。無名関数(おれは匿名のほうが良いと思うけど、この本は無名派)や内部関数、関数を返す関数(そういえば高階関数という用語は使っていない)、などなど。最後はスコープを図示してクロージャの説明。これでもわからない人はわからないだろうが、実際に動かしながらしばらくいじれば大丈夫かも。
気になった点:P.98 3.5.1 ちょっと読みにくい。できる-できないのつながりのせいかなぁ。ひっかかったのは全体を通してここくらいで、翻訳はこなれていて固すぎず柔らかすぎず良い感じ。
第4章
オブジェクトについて。
・おれは、以前、var i = new Number(0); みたいなたわけたことをしてswitchで死んだことがあったので、このあたりにはちょっとうるさい。本書ではきちんとプリミティブとオブジェクトの違いを説明していあるので、安心しながら読めた。
・Booleanをnewなしで呼ぶのは役に立つという指摘はなるほどと思った。if (Booelan('')) { '真な文字列'; }
第5章
プロトタイプ
確かに、独立した章にすべきだなぁ。
相当しつこく例を示しながら説明(コンストラクタとの関係を含む)しているので、覚えると思う。
コンストラクタにプロトタイプを設定した後、プロトタイプのコンストラクタに設定されたコンストラクタを設定するのはそういうものらしいがなぜだろう? (追記:prototype.constructorがあてにならないので(これは何度も忠告される)、自分で常に正しくするように習慣づけるというベストプラクティスなのだろう)
P.166「指していていた」→「指しています」
P.173「同じものではない」→「同じものではありません」
なぜかこの章は常体が残っている箇所がある。
第6章
継承
プロトタイプチェーンに始まり、クロフォード仕込のuberや、シャローコピー、ディープコピーまで。チェーンを切るための一時的なコンストラクタとか、多重継承(ミクッスインとして)やそれが嫌な人用の寄生的継承(つまりはcontainment)など。標準的な方法と、いざとなったら使える方法について。
P.205 リストの最後の行。return that; は独立した行にしないとわかりにくい(バグかと思った)。
・ケーススタディがついているのは、初心者になぜ継承が必要かを示すものとして良いかも。ここでcanvasを使えるのが生きている。
第7章
ブラウザ環境
DOMとBOM。FirefoxとIE9などで共通の機能を使って一通り説明。addEventListener含む(IE互換の記述方法についても説明あり)。
最後はAJAXに触れる。
・evalは悪。setTimeoutなどに文字列を与えるな、と強調(当然、それ以前にもeval系は使うなとしている)。
P.228 「falsy」意味はわかるけど「winの値がfalseであるか」としたほうが良いと思う。
P.229 なぜかFirefoxではなくIE9のキャプチャを利用している(ここだけ)。不思議だ。
第8章
コーディングパターンとデザインパターン
コーディングパターンとはイディオムのこと。相当実用的なことが書いてある。グローバル名前空間を汚さないように自己実行可能関数(function() { 初期化コード })();を使えとか、名前空間とか、遅延実行とか。JSONについては、json.orgのJSON.parseだけど、これは既に組み込みじゃなかったっけ?
デザインパターンは、シングルトン、ファクトリー、デコレータ、オブザーバについて。
付録
予約語と組み込みオブジェクトのメソッド一覧など。
オブジェクト指向JavaScript(Stoyan Stefanov)
どんな初心者でもすぐに中級者になって、コンストラクタとプロトタイプと関数の引数やクロージャなんかで悩むことになる。という意味では構文から始まる初心者用入門書だけど、中級者になってもそのまま利用できる(ただし、ある時点で、テスト駆動JavaScriptを読むべきとは思うが)し、例が豊富なのでお勧めできます(何もわからない初心者にはどうかはわからないけど、そんなわけのわからない時期なんてせいぜい1週間なんだから、これを買ってブラウザーでF12叩いてカタカタ、キー入力すればいいと思う)。
中括弧を波括弧と表記するのはとても気になる。(同じことで大括弧を角括弧と表記されるのもいやだな。)
と思って、ちょっとグーグルさんに聞いたら、なるほど、ja.wikipediaを物知らずな知ったか(JIS Z8201が世の中のすべてだと思い込んでいる馬車馬)が記述して変な見解が広まったのか。『約物』という日本語を知っていればこんな記述はありえないので修正してやろうと一応JIS X 0213を見たら中括弧の後ろに波括弧と併記してあって驚いた。
とするとプログラミングの技術書などでは数学記号としての「{}」ということで波括弧という表記は正しいことになるのか。国語で先に習ったか(おれおれ)、数学で先に習ったか(馬車馬)の刷り込みの差みたいだなぁ。というわけで数学記号としては波括弧と呼ぶらしい。
おそらく明治時代にドイツ語から引っ張ってきて中括弧で定着させたのに、戦後になってアメリカ語から翻訳しなおしたものが数学界あたりで定着したんだろうな。
ジェズイットを見習え |
曖昧さのない「にょろ括弧」派ですw
にょろ括弧ってのは初耳だけど、今度使ってみよう(確かに一発で字体が通じそう)。