2010/06/09

[本]JavaScript: The Good Parts

さきほど、読了しました。

目次

訳者まえがき
はじめに

1章 良いパーツ
1.1 なぜJavaScriptなのか?
1.2 JavaScriptを解析する
1.3 プログラムをテストする簡単な方法

2章 文法
2.1 ホワイトスペース
2.2 名前
2.3 数値
2.4 文字列
2.5 命令文
2.6 式
2.7 リテラル
2.8 関数

3章 オブジェクト
3.1 オブジェクトリテラル
3.2 値の取得
3.3 値の更新
3.4 参照
3.5 プロトタイプ
3.6 リフレクション
3.7 プロパティの列挙
3.8 プロパティの削除
3.9 グローバル領域の利用を減らす

4章 関数
4.1 Functionオブジェクト
4.2 関数リテラル
4.3 関数の呼び出し
4.3.1 メソッド呼び出しパターン
4.3.2 関数呼び出しパターン
4.3.3 コンストラクタ呼び出しパターン
4.3.4 apply呼び出しパターン
4.4 引数
4.5 戻り値
4.6 例外
4.7 変数型の拡張
4.8 再帰
4.9 スコープ
4.10 クロージャ
4.11 コールバック
4.12 モジュール
4.13 カスケード
4.14 カリー化
4.15 メモ化

5章 継承
5.1 疑似クラス型
5.2 オブジェクト指定子
5.3 プロトタイプ型
5.4 関数型
5.5 オブジェクトのパーツ

6章 配列
6.1 配列リテラル
6.2 配列の長さ
6.3 要素の削除
6.4 要素の列挙
6.5 配列かどうかの判定
6.6 配列のメソッド
6.7 次元

7章 正規表現
7.1 正規表現の例
7.2 正規表現の構築
7.3 正規表現の構成要素
7.3.1 選択肢
7.3.2 正規表現シーケンス
7.3.3 正規表現因子
7.3.4 エスケープ
7.3.5 正規表現グループ
7.3.6 正規表現クラス
7.3.7 正規表現クラスにおけるエスケープ
7.3.8 数量詞

8章 メソッド

9章 スタイル

10章 美しい機能たち

付録A ひどいパーツ

付録B 悪いパーツ

付録C JSLint

付録D 鉄道ダイアグラム

付録E JSON

索引

via:目次

前回、JavaScript 第5版を紹介したのですが、それよりも、もっと実用的で、実践的な内容になっているのですが、確実に、初心者向きではありません。

無名関数かJavscriptでのオブジェクト指向の実現方法を少しでもかじったことがないと厳しいかもしれません。

本書は、さすが、JSONの提唱者だけあって、鉄道ダイアグラムによるJavaScriptの表現が多発しています。
(特にいい悪いとかではありませんが、他の本と比較して特徴的だったので。)

ブログ等などでもちょくちょく話題になるカレー化やapplyメソッドを使ったオブジェクトの継承などより一歩突っ込んだ内容を勉強することができます。さらに素晴らしいのは、良いパーツだけではなく、付録として、「悪いパーツ」、「ひどいパーツ」なども取り上げているところがグッド。

しかし、弾さんもおっしゃっていますが、

ただし、本書は「バイブル」ではない。本書の「ベストプラクティス」には異論もかなり出ると思われる。特に出そうなのは、withの扱いと、それ以上にnewの扱いだろう。

via:!!Oh(JavaScript); // - 書評 - JavaScript: The Good Parts

確かに本書では、上の2つを悪いパーツとして紹介しているんですね。

特に、「new」に関しては、Javaエンジニアや、PHPエンジニアにとって、newでインスタンス変数を宣言をした方が直感的にわかる上に、一般的なオブジェクト指向の慣例からすれば、決して悪くはないじゃないのかなーと。

皆さんは、どうでしょうか?

さらに、本書のカリー化の部分で、下記のような記述が登場します。
//著作権の都合上、本書を一部変更して書いています。
Array.prototype.slice.apply(arguments)

なぜ、第二引き数がないのに、わざわざ、sliceメソッドを実行しているのかに悩んだ方は、
javascript - Array.prototype.slice.apply(arguments) // 引数一発配列化
を参考にしてください。
きっと理由がわかると思いますよ。

読んでいた当初、ものすごく悩みに悩んで3日くらい先に進むことができなかったのですが、弾さんの記事を読んで、すっきりしました。

やはり、本を読んでわからなくなったところは、調べるにつきますね。
と同時に、オライリー本としては、ちょっと異論が残る内容でした。

0 コメント:

コメントを投稿