ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript: 世界で最も誤解されている言語
JavaScript、または Mocha、LiveScript、JScript、または ECMAScript は、世界で最も人気のあるプログラミング言語の 1 つです。事実上、世界中のすべてのパーソナル コンピュータには、少なくとも 1 つの JavaScript インタプリタがインストールされており、アクティブに使用されています。 JavaScript の人気はひとえに、WWW スクリプト言語の分野における JavaScript の地位によるものです。
その人気にもかかわらず、JavaScript が優れた動的オブジェクト指向汎用プログラミング言語であることを知っている人はほとんどいません。実はこれが秘密になる可能性があります!なぜこの言語はこれほど誤解されているのでしょうか?
名前
Java- この接頭辞は人々に簡単に Java を思い出させ、それが Java のサブセットまたは Java の簡略化されたバージョンであると考える可能性があります。もともとこの名前は、意図的に概念を混乱させ、「誤解」を生み出すという下心で付けられたようです。 JavaScript は Java として解釈されません。 Java は解釈された Java です。 JavaScript は別の言語です。
Java の構文が C に非常に似ているのと同じように、JavaScript の構文も Java に似ています。しかし、Java が C のサブセットではないのと同じように、これは Java のサブセットではありません。 Java (Oak) が当初取り組むことを意図していた領域では、Java よりも優れています。
JavaScriptはSun Microsystemsの製品ではなく、SunはJavaの本拠地です。 JavaScript は Netscape で開発されました。元々は LiveScript と呼ばれていましたが、それは今でも良い名前です。
-Script 接尾辞は、人々にそれが本物のプログラミング言語ではないと思わせます、そしてそれと「プログラミング言語」の間にはまだかなりのギャップがあります。ただし、これはアプリケーション ドメインのみの問題です。 C と比較すると、JavaScript は豊かな表現力と柔軟な形式と引き換えにパフォーマンスを犠牲にします。
C スキンの Lisp
JavaScript は、中括弧やステートメントの形式を含め、C に似た構文により、通常のプロセス指向プログラミング言語のように見えます。 JavaScript は C や Java よりも Lisp や Scheme などの関数型言語との共通点が多いため、これは誤解です。リストの代わりに配列を使用し、プロパティ リストの代わりにオブジェクトを使用します。関数が最初にあり、クロージャ (クロージャを翻訳する方法??) があり、ラムダ式も使用できます。
型変換
JavaScriptはもともとNetscape Navigatorで実行されるように設計されており、Navigatorでの成功により、事実上すべてのWebブラウザに標準搭載されるようになりました。これにより「型変換」が行われます。 JavaScript はプログラミング言語のジョージ リーブス (スーパーマン) であり、Web 以外の多数のプログラムに適した選択肢です。
移動目標
JavaScript の最初のいくつかのバージョンは非常に弱く、例外処理も内部関数も継承もありませんでした。現在では、完全なオブジェクト指向プログラミング言語となっています。しかし、この言語のアイデアの多くは、その未熟な形式に基づいています。
この言語の管理者であるECMA委員会は、言語を拡張し、バージョンが多すぎるという最大の問題を意図的に悪化させています。これは混乱の原因です。
設計エラー
完璧なプログラミング言語は存在しません。 JavaScript には、型に応じて「追加」と「接続」の両方を意味するオーバーロードされた + 記号や、避けるべきエラーが発生しやすい with ステートメントなど、設計上のエラーもあります。その予約語ポリシーは厳しすぎます。セミコロンの挿入は、たとえばリテラル正規表現の記号として使用される場合など、大きな間違いです。これらの間違いはプログラミングのエラーに直接つながり、言語の全体的な設計に疑問を投げかけました。幸いなことに、これらの問題の多くは、優れた lint プログラムを使用することで軽減できます。
この言語の全体的な設計は非常に明白です。奇妙なことに、ECMAScript 委員会は既存の問題を解決することにあまり関心を示しておらず、おそらく新しい問題を作成することにもっと興味があるということです。
貧弱な実装
JavaScriptの初期の実装には多くのバグがあり、それが言語自体に非常に悪い影響を与えました。さらに悪いことに、これらのバグのある実装がバグのある Web ブラウザに埋め込まれていることです。
悪い本
ほとんどすべての JavaScript の本はかなりひどいです。これらにはエラーが含まれており、悪い例が含まれており、悪い習慣を奨励しています。 JavaScript 言語のいくつかの重要な機能は、明確に説明されていないか、まったく言及されていません。私は JavaScript の本をたくさん読みましたが、お勧めできるのは 1 冊だけです。David Flanagan 著の『JavaScript: The Definitive Guide (4th Edition)』です。 (著者への注意: 良い本を書いたら、コピーを送ってください。校正します。)
「準標準」の規格
ECMAが発行する公式言語仕様の品質は非常に悪い。読みにくいだけでなく、理解するのも非常に難しいです。これは、著者がこの標準文書を通じて言語をより深く理解できなかった「悪い本」に多大な貢献をします。 ECMA と TC39 はこれについて非常に当惑するはずです。
アマチュア
JavaScriptを使う人のほとんどはプログラマーではなく、良いプログラムを書くための訓練も受けていません。 JavaScript は非常に表現力が豊かで、とにかくそれを使って便利なことができます。このため、JavaScript はプロのプログラマーよりもアマチュア向けであるという評判が生まれています。これは明らかに間違いです。
オブジェクト指向
JavaScriptはオブジェクト指向ですか?これにはオブジェクトがあり、そのオブジェクトにはデータを含めることができ、そのデータを操作するためのメソッドも含めることができます。クラスはありませんが、クラス変数やメソッドの宣言など、クラスの処理を行うコンストラクターがあります。クラス指向の継承はありませんが、プロトタイプ指向の継承はあります。
オブジェクトシステムを構築する主な方法は、継承 (is-a) と集約 (has-a) の 2 つです。 JavaScript には両方の機能がありますが、その動的な性質により、集約よりも優れた実装が可能になります。
JavaScript が実際にはオブジェクト指向ではないという議論の一部は、JavaScript が情報の隠蔽を提供しないという事実に基づいています。つまり、JavaScript オブジェクトにはプライベート変数やメソッドはなく、そのメンバーはすべてパブリックです。
しかし実際には、JavaScript オブジェクトはプライベート変数とプライベート メソッドを持つことができます (これを行う方法については、ここをクリックしてください)。もちろん、このことを知っている人が非常に少ない理由は、JavaScript が世界で最も誤解されている言語だからです。
JavaScript が実際にはオブジェクト指向ではないというもう 1 つの議論は、JavaScript が継承を提供しないことです。しかし実際には、JavaScript は従来の継承をサポートしているだけでなく、他のコードの再利用パターンもサポートしています。
翻訳: Yuan Xiaohui 元のリンク: http://www.crockford.com/javascript/javascript.html