䌑日ずしおのJavaScript

この金曜日の蚘事は、著者がJavaScriptに察する根拠のない批刀を提瀺した珟象ずしおのJavaScript蚘事ぞの応答です。 個人的に、私はJavaScriptを15幎間曞いおおり、これたでで最も匷力なPLの1぀であるず心から思っおいたす。 この蚘事は、可胜であれば、批刀の䞻な点に぀いお理にかなった䜍眮を持ちたす。初心者はJavaScriptに本圓に問題があるこずが倚いからです。 スクリプトの接頭蟞ず蚀語の軜薄なむメヌゞは誀解を招きたすが、実際には、この蚀語はフロント゚ンドおよびバック゚ンドからデスクトップおよびモバむルアプリケヌション、集積回路のプログラミング、ビデオ凊理など、さたざたな分野で䜿甚されおいたす。 私は長い間、 JavaScrip t に぀いおの䞀般的な誀解を明らかにしたかったのですが、ここでは理由が明らかになったので、猫の䞋で歓迎したす。



JavaScriptは珟圚、地球䞊で最も人気のある蚀語です。 JavaScriptがWeb䞊の独占以倖で人気を博した理由は、その民䞻的な性質です。 手続き型のスタむルで、オブゞェクト指向で機胜的なプログラミングが可胜です。 開発者に最小限の制限を課し、「愚かさ」を実行できるようにしたす。 しかし皮肉なこずに、ナンセンスなこずはあるクラスのタスクに適甚され、別のクラスに適甚されるのは適切以䞊です。 䌝説によれば、JavaScriptは2週間で䜜成されたした。 繰り返しになりたすが、このような状況での人生の皮肉は、蚀語に最も重芁なものだけを眮くこずが可胜であり、 䜙分な 、䌝統的な、「正しい」 すべおを残したす。 蚀語の最初のバヌゞョンは非垞にコンパクトで簡朔であるこずが刀明したした。 これらのget / set、const、awaitはすべお、埌で登堎したした。 この蚀語の最初の原則は非垞に優れおいたため、10幎間1999幎から2009幎たで、蚀語は䜕の倉曎もなく生き続けたした。 もちろん、MicrosoftやMozillaのポリシヌなど、これには吊定的な理由がありたしたが、他の人気のある蚀語の倚くが同じテストに合栌し、その埌䞊昇するこずはないず確信しおいたす。 10幎間曎新されなかった埌、TypeScriptたたはRustがどうなるか想像しおみおください。 JavaScriptが生き残った理由は非垞に単玔です;それは1぀の問題を解決し、完党にそれをしたす。



JavaScriptは、構文糖たたはクヌルな機胜のセットであるず䞻匵しおいたせん 。プログラマヌは自分で蚘述/接続できたす。 JavaScriptは、デバむスのハヌドりェアをナヌザヌから隠し、 ロゞックで䜕でもできるようにし、そのたたにしおおきたす 。 evalが必芁ですか-オブゞェクトを再定矩しおください-問題はありたせん。関数に枡すこずは「䞍可胜」です-ようこそ、それはあなたの頭でのみ「䞍可胜」だからです。 GoたたはCプログラマヌは、なぜこれが良いのか理解するのが非垞に難しいず感じおいたす。 圌らの垜子に挑戊しないために、これらは矎しい蚀語であり、たったく異なっおいたす。 叀兞的に、蚀語は、型チェック、さたざたな必須のベストプラクティスなど、プログラマヌが自分の足を撃おないようにする障壁を蚭けおいたす。 JavaScriptにはこれらの障壁がなく、どこにでも撃぀暩利があり、0.01の堎合、脚で撃぀こずも理にかなっおいたす。 これはスポヌツカヌず比范できたす。倚くの蚀語では、䞀郚の機胜がブロックされおいたすが、JavaScriptではブロックされおいたせん。 運転が䞍十分な堎合-マむナスや危険などかもしれたせんが、蚀語、アヌキテクチャ、パラダむムを実際に理解し、すべおの䜿甚方法を知っおいる堎合-䞀般的なタスクではJavaScriptよりも優れおいたす芋぀けられない。 プラむベヌトの堎合、䞀般的には、普遍的であり、客芳的には䞍可胜です。 倚くの人は、Javaでは蟞曞を䜜成でき、JSオブゞェクトの類䌌物であり、PythonずRubyも型付けされない、倚くのevalずduckの型付けがあるが、JavaScriptのように䜿いやすいず䞻匵したす。 たずえばJavaでは、蟞曞は型付きのクラス指向フレヌムワヌクに远加されるだけであり、JavaScriptでは、これは蚀語のコアであり、2぀の "{}"文字で䜜成されたす。 スポヌツカヌの堎合、アフタヌバヌナヌは3぀のボタンずレバヌではなく、右手の芪指の䞋にある1぀のボタンによっお呌び出されたようです。 自由は単に可胜であるだけでなく、奚励されおいたす。



圌らは額を壊さないように慣れおいるため、これは倚くの人をmany迷に陥れたす。 WindowsからLinuxに切り替えるようなものです。 「sudo rm -Rf /ず入力するず、すべおが壊れたした。 システムではなく、r ...が。」 このような考慮事項により、マスタヌぞのパスは非垞に長くなりたす。 JavaScriptを入力するためのしきい倀は非垞に䜎いたたであり、倚くの初心者は、自分が理解しおいないものをscる理由を䞎えおいたす。 さらに、人はLispで20幎の経隓を持぀こずができたすが、JavaScriptでは、スマヌトなどのドキュメントを読んでいたせんでした。 これは単玔なプログラムを曞くのに十分ですが、人がなぜ真<2 ===真であり、なぜそれが正しく論理的であるかを理解したい堎合、型倉換に぀いお読む必芁があり、理想的にはすべおのドキュメントたたは良いフルブックはそうではありたせん長い間。



ここで、ポむントに関する批刀に答えたす。



質問1シングルスレッドランタむム



これは非垞に䟿利で、オブゞェクトのロックず所有暩、およびマルチスレッドのその他の機胜に問題はありたせん。 なぜマルチスレッドが必芁なのですか 長い操䜜が完了するのを埅っおいる間にプログラムをさらに実行したすか Kolbeksはこれをはるかに改善したす。 1぀の䞭芏暡マシン䞊のNodeJSは、100,000の接続を保持できたす。 コヌルバックをフロヌアプロヌチに眮き換えた堎合、いく぀になりたすか マルチプロセッサマシンでは、jsはロヌカルクラスタヌの起動に察応したす。 8コア-8プロセス、16コア-16プロセス。それぞれ独立しおおり、内郚は単玔です。 これは、800䞇人のナヌザヌがいるオンラむンゲヌムのメむンサヌバヌテクノロゞヌずしおのアプリケヌションの実䟋です。 非同期/スレッドの操䜜は匱点ではありたせんが、JavaScriptの最も匷力な利点の1぀です。 これには再蚓緎ず習慣の倉曎が必芁かもしれたせんが、私を信じおください、あなたは倚くを埗るでしょう。



質問2モゞュヌルの実装のための統䞀システム/暙準の欠劂



JavaScriptには、モゞュヌルを操䜜するための2぀の䞻なオプションがありたす。



どちらの方法もうたく機胜し、盞互に完党に互換性がありたす。 奜みの方法を遞択できたす。 たずえば、私はrequireを奜むが、それはオヌバヌラむドできるからであり、これはJavaScriptの哲孊にもっず沿っおいる。 これは、たずえば、プリプロセッサを䜜成するずきなどに意味がありたす。 2぀の「䞻な」オプションは、JavaScriptコミュニティがあらゆる革新に察しおオヌプンであり、モゞュヌルを操䜜するための3番目、4番目、1000番目のシステムを䜜成できるためです倚くは既に䜜成枈みです。 もう1぀の質問は、プロゞェクトの倖郚で䜿甚するかどうかです。 蚘茉されおいる2぀の方法は、Web開発の事実䞊の暙準です暙準に興味がある堎合。



質問3プロゞェクトの構造に関する共通の暙準の欠劂誰もが望むこずをしたす。゜ヌスコヌドを理解するこずは非垞に困難です



私は「圌らが望むこずをする」同僚に同情したす。 たたはあなたず同僚。 原則ずしお、Web開発にはいく぀かの兞型的なプロゞェクト構造がありたすが、そのうちの1぀が䜿甚されたすが、これはどこにも仮定されおおらず、郜合の良い芋方に基づいお誰でもプログラムを曞くこずができたす。 䜕が欲しかった これは地球䞊で最も人気のある蚀語であり、DSLの䞀皮ではありたせん。 JSアプリケヌションごずに異なる暙準があり、圓然です。 緎習に関しおは、たずえば、ラむブラリの難読化されたコヌドも非垞によく読んでいたす。 経隓を積んで、䞀般的なパタヌンを孊びたす。



質問4暗黙のそしお時には奇劙な倉換を䌎う匱い型



誰のために奇劙なの Java、C、PHP、Python、Lisp、たたはAmsプログラマヌですか asmは奇劙ではないず蚀いたすか Lispはどうですか 䞖界はあなたの奜きな蚀語よりもはるかに豊かであり、䞀郚の人にずっお奇劙なこずは他の人にずっおは普通です。 少なくずもHaskellずそのモナドずファンクタヌを芋おくださいずころで、非垞に匷力なもの。これらはJS、jQueryでも䜿甚されおいたす。 研究所はこれを教えたせんでしたね OOPは䞖界のごく䞀郚にすぎず、非垞に小さく、ハックされおいるため、話すのも退屈です。 JavaScriptの型は匱くはありたせんが、基本的には匱くはありたせんプリミティブ型を陀く。 WeakMapなどは、他の蚀語からの移民を喜ばせるためだけに導入されたした。 アヒルのタむピングに぀いお読み盎し、それを䜿甚するこずを孊ぶず、タむプに問題はありたせん。



質問5通垞のクラスの欠劂/ OOP



繰り返しになりたすが、クラスは他の蚀語からの移民ずIDEのために特別に導入されたした。 NodeJSはもちろん、すべおの䞻芁なブラりザヌでサポヌトされおいたす。 JavaScriptのOOPは、他のほずんどの蚀語よりも豊富です。 クラスを介しお継承でき、プロトタむプを介しお継承できたす。 倚くの堎合、JavaScriptプロトタむプの適切な䜿甚はより速く、より䟿利で、より論理的であり、プログラムはよりコンパクトで読みやすいです。 しかし、このこずは研究所で教えられおいないため、JavaScriptコミュニティはこれも可胜であるこずを蚌明しなければなりたせん。



質問6単䞀の正気で動䜜する静的コヌドアナラむザヌの欠劂undefinedのような愚かな゚ラヌの玠晎らしい䞖界ぞようこそは機胜ではありたせん



これは、evalを䜿甚するすべおのむンタヌプリタヌ蚀語に共通する問題です。最も愚かな間違いの5をキャッチできるようにするために、この暩限を攟棄するのは疑わしい考えです。 䞀般に、IDEスカヌトの埌ろに垞に隠れおいるずは限らず、コヌドの芏埋を開発したす。 これは冗談ではありたせん、アナラむザヌは良いですが、あなたにずっお問題がそのような゚ラヌである堎合-どういうわけかあなたは正しくプログラミングされおいたせん。



質問7蚀語自䜓たたはツヌルに型掚論がない



぀たり、構文を孊習したす。 状況に応じた1぀のオプション



typeof myVar
myVar.constructor

      
      





8: this ( this — ? ?)



this . myObj.func(), , this myObj. , myObj , , bind. JS, , , myObj2.func = myObj.func, . this myObj myObj2, . , , . this window undefined, strict mode. , . . , this , ? - . , , , . - , . JavaScript , C++ , , , . . , this , - « 2 , 2 , ?» . , this . , , , . JavaScript , , , PhantomJS c User-agent Chrome — .



9: pattern matching ( / — , undefined, , ? ) cannot read property foo of undefined



:



  1. . —
  2. — . , C# , Facebook . , , , .


10: — , , , async ( npm )



, , async/await — , . , , . , , . async/await , . async/await await , . async node, , JS . , ES6. , , npm ( ). Fibers, Sync, , . , , , .



11: const ( const )



, . :



const a = 5
const a = 4
VM1825:1 Uncaught SyntaxError: Identifier 'a' has already been declared
    at <anonymous>:1:1

      
      





— , const , . const. , // , - , JavaScript, . . .



12: npm, « »



. , github. . , , . . . , , /, . — , , Sencha. , . npm , . , .



JavaScript , , , . JavaScript. -, . JavaScript , . - .



All Articles