第 1 章 本質 JavaScript の機能の中には、その価値よりも面倒なものもあります。その中には、仕様が非常に不完全であるため、移植性の問題が発生する可能性があるものや、コードの生成が難しくなり、コーディング スタイルが非常に複雑になり、エラーが発生しやすいものもあります。一部の機能は単なる設計ミスです。言語設計者は時々間違いを犯すことがあります。
ほとんどのプログラミング言語には、良い部分と弱い部分があります。良い部分だけを使い、無駄なものを避ければ、より良いプログラマーになれることがわかりました。結局のところ、どうやってくだらない部品から良いものを構築できるのでしょうか?
標準委員会が言語の欠陥部分を削除することはほぼ不可能です。そうすることで、それらの役に立たない部分に依存する悪いプログラムすべてが損傷を受けることになるからです。通常、既存の欠陥の山の上にさらに機能を積み上げる以外にできることはありません。また、新しい機能と古い機能が常に調和して共存するとは限らず、無駄な部分が増える可能性があります。
ただし、独自のサブセットを定義する権限はあります。最良の部分に基づいて、より良いプログラムを作成できます。 JavaScript には無駄な部分の割合が予想を超えています。驚くほど短期間で、存在しなかった状態から世界的に普及するまでになりました。実験室で試して磨いたことは一度もありません。それがまだ非常に粗雑だったとき、それは Netscape の Navigator 2 ブラウザに直接統合されました。 Java アプレットの廃止により、JavaScript がデフォルトの「Web 言語」になりました。プログラミング言語としての JavaScript の人気は、その品質とはほぼ完全に無関係です。
幸いなことに、JavaScript には非常に重要な部分がいくつかあります。 JavaScript の最も本質的な部分は深く隠されているため、長年にわたって JavaScript は醜くて役に立たないおもちゃであるという主流の見方が主流でした。本書の目的は、JavaScript の本質を明らかにし、JavaScript が優れた動的プログラミング言語であることを皆さんに知ってもらうことです。
本質的な部分だけを学ぶことの最大の利点は、無駄な部分について考えなくて済むことかもしれません。悪いパターンを学習しないことは非常に困難です。これは、私たちのほとんどが直面したくないであろう非常に苦痛な仕事です。場合によっては、生徒がより良く学習できるように、言語のサブセットが開発されることがあります。しかし、ここでは、マスタープロフェッショナルにとってより適切に機能する JavaScript のサブセットを作成しました。
1.1 JavaScript を使用する理由 JavaScript は Web ブラウザーの言語であるため、重要な言語です。ブラウザとの統合により、世界で最も人気のあるプログラミング言語の 1 つになりました。同時に、世界で最も過小評価されているプログラミング言語の 1 つでもあります。ブラウザー API とドキュメント オブジェクト モデル (DOM) があまりにもひどいため、JavaScript は不当な非難を受けています。
JavaScript はいわゆる主流言語ではないため、最も軽蔑されている言語です。主流の言語に堪能でも、JavaScript のみをサポートする環境でプログラミングをしている場合、JavaScript の使用を強制されるのは非常に面倒な場合があります。ほとんどの人は、最初に JavaScript を学ぶ必要性を感じていませんが、JavaScript が自分たちが使用したいと考えている主流の言語とは大きく異なり、これらの違いが重要であることに気づくと驚かれます。
JavaScript の驚くべき点は、その言語やプログラミングについてあまり知らなくても、JavaScript を使って作業を進めることができることです。非常に表現力の高い言語です。何をすべきかがわかっていれば、さらにうまくいきます。プログラミングは難しいです。何も知らずに仕事を始めてはいけません。
1.2 JavaScript の分析 JavaScript は、いくつかの非常に良いアイデアといくつかの非常に悪いアイデアに基づいて構築されています。
これらの本当に良いアイデアには、関数、弱い型付け、動的オブジェクト、表現力豊かなリテラル表現が含まれます。これらの悪いアイデアには、グローバル変数に基づくプログラミング モデルが含まれます。
JavaScript 関数は、(主に) 字句スコープに基づくトップレベルのオブジェクトです。 JavaScript は、主流になった最初のラムダ言語です。実際、JavaScript には Java よりも Lisp や Scheme との共通点が多くあります。 Cの服を着たLispです。このため、JavaScript は非常に強力な言語になります。
強い型付けは、今日のほとんどのプログラミング言語で一般的な要件です。この考え方は、強い型付けによりコンパイラがコンパイル時にエラーを検出できるようにするというものです。バグを早期に検出して修正できるほど、費用は安くなります。 JavaScript は型指定が弱い言語であるため、JavaScript コンパイラーは型エラーを検出できません。一方、弱い型付けは実際には無料です。複雑なサブシステムを作成する必要はなく、キャストを行う必要も、必要な動作を得るために型システムを操作する必要もありません。
JavaScript には非常に強力なオブジェクト リテラル表現があります。オブジェクトは、その構成要素をリストするだけで作成できます。この表現により、一般的なデータ交換形式である JSON が誕生しました。
プロトタイプの継承は、JavaScript における物議を醸す機能です。 JavaScript にはクラスフリーのオブジェクト システムがあり、オブジェクトは他のオブジェクトからプロパティを直接継承します。これは非常に強力ですが、クラスを使用してオブジェクトを作成する訓練を受けたプログラマーにとって、プロトタイプの継承は馴染みのない概念です。クラスベースのデザイン パターンを JavaScript に直接適用しようとすると、挫折することになります。ただし、JavaScript のプロトタイプ的な性質の使い方を学べば、その努力は報われます。
JavaScript は、重要なアイデアの選択に関して批判されています。ただし、ほとんどの場合、これらのオプションが適切です。しかし、非常に悪いオプションが 1 つあります。それは、JavaScript が連結にグローバル変数に依存しているということです。すべてのコンパイル単位のすべてのトップレベル変数は、グローバル オブジェクトと呼ばれる共通の名前空間にグループ化されます。グローバル変数は悪魔であり、JavaScript の基本であるため、これは悪いことです。
場合によっては、無駄な部分を無視できない場合があります。避けられないバグもいくつかありますので、その部分に関しては指摘させていただきます。くだらない部分とその不適切な使用方法について知りたい場合は、他の JavaScript の本を読んでください。
JavaScript は多くの違いがある言語です。これには多くのバグと鋭いエッジが含まれているため、「なぜ JavaScript を使用する必要があるの?」と疑問に思うかもしれません。答えは 2 つあります。 1つ目は、選択の余地がないということです。 Web は重要なアプリケーション開発プラットフォームになっており、JavaScript はすべてのブラウザーが認識できる唯一の言語です。残念ながら、Java はブラウザ環境では失敗します。 JavaScript の精力的な開発は、JavaScript に利点があることを示しています。
もう 1 つの答えは、JavaScript には欠点があるにもかかわらず、非常に優れているということです。軽量かつ表現力豊かです。一度コツを掴めば、関数型プログラミングはとても楽しいものになります。
しかし、この言語をより良く使用するには、その限界を知る必要があります。容赦なく暴いてやる。これで落胆しないでください。この言語の優れた部分は、その弱点を補って余りあるものです。
1.3 単純な試験場 Web ブラウザとテキスト エディタがあれば、JavaScript プログラムを実行するために必要なものがすべて揃っています。まず、program.html という名前の HTML ファイルを作成してください:
;/pre>