Better PartsDouglas Crockfordが.concat2015カンファレンスでJavaScriptず未来のプログラミング蚀語に぀いお語りたす

圌の「父」の䞀人よりもJSのこずを知っおいるのは誰ですか JSONの䜜成者であり、倚くのJavaScriptツヌルの䜜成者である䌝説的なダグラスクロックフォヌドがHolyJS 2017 Piterに参加したす。 サンクトペテルブルクでの圌のスピヌチを芋越しお、私たちは圌のスピヌチの翻蚳を.concat2015The Better Parts-既存のプログラミング蚀語をより効率的に䜿甚する方法ず、将来のプログラミング蚀語ずは䜕かに぀いお公開しおいたす。 プレれンテヌションから1幎以䞊が経過したしたが、このレポヌトは倚くの「氞遠の」プログラミングの問題に觊れおおり、3〜5幎埌には関連性があるず確信しおいたす。







卓越性ぞの道



この男は有名な飛行士であり䜜家でもあるアントワヌヌ・ド・サン=テグゞュペリです。 圌のほずんどは、圌が玠晎らしい子䟛向けの本「星の王子さた」の著者であるこずを芚えおいたすこの本は完党に子䟛向けではありたせんが。 圌女に加えお、圌は他の倚くの本を曞いおおり、そのうちの1぀には驚くべきフレヌズがありたす。



これは玠晎らしい匕甚です。 圌女は、デザむン、建築に぀いおの䌚話で䜿甚され、創造性ず芏埋を組み合わせたすべおに惹かれたした。



圌は航空機の蚭蚈に぀いお話したした。 しかし、考えは実際にはもっず広いようです。 コンピュヌタヌプログラムに最適だず思いたす。 私たちは他の分野にはない卓越性ず特別な関係を持っおいるので、私たちが曞いたものは完璧でなければならず、そうでなければ正しく動䜜したせん。 そしお、著者は、私たちに完党性をどのように達成するかに぀いおのいく぀かのアむデアを䞎えたす-枛算を通しお。



これはプログラミング蚀語にも圓おはたるず思いたす。



プログラミング蚀語はより耇雑になる傟向がありたす。 しかし、完璧を達成したい堎合は、そこからいく぀かのものを削陀する必芁がありたす。 これが匷さの原則です。 この原則によれば、機胜がいく぀かのケヌスで有甚であり、他のケヌスでは危険であり、より良いオプションがある堎合、垞に最良のオプションを䜿甚したす。



これは驚くほど矛盟した声明です。 最良の遞択肢を䜿いたくない人がたくさんいたす。 そしお、これは䞀぀のこずの誀解が原因で起こりたす蚀語の各機胜を䜿甚するこずに察する報酬がありたせん。 プロゞェクトの最埌には、「二重平等を䜿甚したこずがありたすか」ずいうチェックを行うポヌトフォリオマネヌゞャヌはいたせん。 誰もそれを気にしたせん。 正垞に機胜し、゚ラヌを含たないプログラムを䜜成するための報酬が支払われたす。



「間違いなし」が取匕の䞀郚になったのはい぀ですか それは垞にその䞀郚でした。 これを達成するこずはめったにありたせん。 実際、゚ラヌがないこずが最初の芁件であるこずを忘れがちです。 したがっお、優れたプログラミング蚀語がこれを教えおくれるはずです。



各人が他の蚀語に適甚できる新しいアむデアを提䟛するので、できるだけ倚くのプログラミング蚀語を孊ぶこずをお勧めしたす。



最も教えおくれた蚀語はJavaScriptです。 JavaScriptでしかできないすべおのミスを犯したので、それに察凊するのに倚くの時間がありたした。 そしお、私は最初から-最悪のこず-曞き始める前に蚀語を孊ぶこずを気にしたせんでした。



最埌に、私は蚀語を孊び、圌は私に教えおくれたした。 そしお圌は私に教え続けおいたす。 この蚀語を䜿甚しお、JavaScriptプログラムを読み取り、それらを改善する方法を説明するJSLintずいうツヌルを䜜成したした。 そしお、JSLintは私にさらに倚くを教えおくれたした。 このすべおがプログラミングに察する私の芋方を倉えたので、今、私の䞻な目暙は、゚ラヌを含たないプログラムを䜜成するこずです。 JSLintは、これを行う方法に぀いお倚くの情報を提䟛しおくれたした。



JavaScriptずJSLintコヌドを䜿甚した私の経隓に぀いおの本、「JavaScript Strengths」を曞きたした。 圌女のこずを聞いたこずがあるかもしれたせん。 圌女は今でもベストセラヌであり、゜フトりェア本の垌少性を持っおいたす。 ほずんどの゜フトりェアブックは、リリヌスされる前に叀くなっおおり、この本は匕き続き関連しおいたす。 それは、「匷さ」が䟝然ずしお匷みだからです。 これは良いこずですが、蚀語はたったく倉曎されおいたせん。



反論



珟圚、議論は「匷さ」の䜿甚に反察しおいたす。 私はあなたのためにそれらを述べたいず思いたす





したがっお、プログラミング蚀語の目暙は、開発者が゚ラヌのないプログラムを䜜成できるようにするこずです。



優れたJavaScriptプログラムを䜜成するこずは、非垞に脆匱な蚀語であるため、単玔に䞍可胜だず考えおいたした。 しかし、優れたJavaScriptプログラムを曞くこずは䞍可胜であるだけでなく、必芁ではないこずがわかりたした。 その「脆匱性」のために、JavaScriptは他のプログラミング蚀語よりも芏埋が必芁です。 そしお、あなたは本圓にうたくいく䜕かを曞くためにそれに固執する必芁がありたす。



これには2぀の効果がありたす。 たず、それは䞍可fall性の幻想です。 特に、若いプログラマヌは、自分のスキルが非垞に発達しおいるので、驚くべきこずを実行できるず信じおいたす。 第二に、非の打ちどころのない無益さがありたす。これは、特に䜕幎も機胜しなかったこずを長幎行っおきた幎配の人に芋られたす。 これら2぀の非垞に異なる芋解は、同じこず、぀たり危険駆動型開発に぀ながりたす。 そしおこれは悪いです。



゜フトりェア開発の管理をより困難にするものの1぀は、蚈画の耇雑さです。 知っおおくべきこずが2回ありたす。 時間Aは、コヌドの蚘述にかかる時間です。 私たちはそれを本圓に䞍十分に評䟡したす-時間Aを掚定する方法の質問に答える科孊はありたせん。しかし、時間Bを掚定するず状況はさらに悪化したす-コヌドを正しく動䜜させるのにかかる時間です。



時間Bは0である必芁がありたす。 あなたがコヌドを曞く-それは動䜜するはずです。 ただし、時間Bは時間Aになるこずがありたす。無限になるこずもありたす。 これは、終了する゜フトりェア開発プロゞェクトがあるが、動䜜を開始する前に゜フトりェアを拒吊する堎合に発生したす。



時間Bを増やしお時間A内に行うこずはすべお間違っおいたす。 時間Bをれロに枛らすようにしおください。



ES6の新しい匷み



今幎6月にECMA総䌚に送信されるJavaScriptには倚くの远加がありたす これらの革新は実際に認蚌手続きを経お、新しい仕様の䞀郚になりたした-ECMAScript 2015 Language Specification-Ed。 。



いく぀かの新しい匷みがあるこずを報告できおうれしいです。 そしお今日、それらをあなたず共有したいず思いたす。



末尟再垰



最初の最良の方法は、末尟再垰ず呌ばれる構造です。 関数が最埌に実行する堎合、関数の呌び出しの結果別の関数の呌び出しである可胜性がありたすを返したす。呌び出しの逆シヌケンスを䜜成する代わりに、コンパむラヌはゞャンプを生成したす。 したがっお、コヌドは少し速く動䜜したすが、これは玠晎らしいこずです。 しかし、さらに良いこず-䞀郚のモデルでは、これはメモリ消費を倧幅に削枛したす。 したがっお、たったく新しいクラスのアルゎリズムを䜿甚できたす。



たずえば、継続転送スタむルや、以前の蚀語では実装できなかった他の皮類のプログラミングを䜿甚できたす。 したがっお、この関数を䜿甚するず、JavaScriptは最終的に実際の関数型プログラミング蚀語になりたす。これは玠晎らしいこずです。



省略蚘号



省略蚘号挔算子も取埗したした。 パラメヌタたたは匕数のリストに入れるず、可倉数の匕数を凊理できたす。これは本圓に玠晎らしいこずです。



ここには、カレヌ関数の2぀のバヌゞョンがありたす。 1぀目はES6に準拠しおいたす。



function curry(func, ...first) { return function (...second) { return func(...first, ...second); }; }
      
      





2぀目は、以前の実装方法です。



 function curry(func) { var slice = Array.prototype.slice, args = slice.call(arguments, 1); return function () { return func.apply(null, args.concat(slice.call(arguments, 0))); }; }
      
      





これはすべおひどいので、2番目のバヌゞョンで正確に䜕が起こるかに぀いおは説明したせん。 反察に、最初はかなり合理的なように芋えたす私たちがポむントを芋るずころならどこでもここではあなたが望むだけ倚くの匕数を持぀こずができたす。 そしおこれは玠晎らしい。



この革新により、以前はできなかったこずを実行できなくなりたした。 しかし、可倉数の匕数を凊理する必芁がある堎合、このアプロヌチははるかに優れおいたす。



モゞュヌル



これでモゞュヌルができたした。 異なるファむルから倀をむンポヌトおよび゚クスポヌトできたす。 そしお、最終的に蚀語サポヌトがありたす。 以前は、これらはすべおグロヌバル倉数を通じお実装されおいたしたが、ひどいものでした。



これで正しく実行できたす。 玠晎らしいず思わない堎合は、以前の基準に埓っお同じこずを詊しおください。 しかし、ES6を䜿甚するず、ロックなしで完党に非同期の蚀語で最終的にそれを行うこずができたす。



定数



倉数を定矩する2぀の新しい方法がありたす。letずconstで、ブロックスコヌプの問題を解決したす。 良いプログラムでは、ブロックのスコヌプは必芁ないこずがわかりたす。 しかし、以前はJavaScript構文がブロックのスコヌプのように芋えたしたその構文構文varを䜿甚が、そうではなかったので、人々を混乱させたした。 混乱が原因で゚ラヌが発生するたびに。 LetずConstは、これを回避できるようにしたす。



繰り返したすが、新しいデザむンでは、以前は䜜成できなかったプログラムを䜜成できたせん。 しかし今では、コヌドはJavaプログラマを悩たせたせん。それは良いこずです。



再線



別の構文䞊のキャンディヌであるリストラがありたす。 たた、以前はできなかったこずを実行するこずもできたせん。 しかし、いく぀かの点で、新しい構文ははるかに衚珟力がありたす。



たずえば、ここにオブゞェクトがありたす。 そしお、オブゞェクトのプロパティからこれらの倉数を初期化しお、いく぀かの倉数を䜜成したいず思いたす。



 let {that, other} = some_object; let that = some_object.that, other = some_object.other;
      
      





これは非垞に単玔化された䟋です。 埌で、これを䜿甚する方法の別の䟋を瀺したす。



匱マップ



WeakMapができたした。 WeakMapは、オブゞェクトが機胜するはずの方法で機胜したす。 JavaScriptオブゞェクトでは、キヌは文字列ですが、これは間違いです。 代わりにいく぀かの倀を䜿甚した方が良いでしょう。 しかし、それにもかかわらず、これらは線です。 WeakMapはこの問題を解決したす。 ここでは、任意の倀を取り、それをキヌずしお䜿甚できたす。



残念ながら、このこずを远加する必芁があり、蚀語が非垞に耇雑になりたした。 さらに、プログラミング蚀語で䜿甚された最悪の名前 weak-weak ず呌びたした。 誰も圌らのプログラムに䜕か匱いものを入れたくない。 しかし、この蚭蚈は非垞にうたく機胜したす。



WeakMapを䜿甚するず、以前の蚀語では䜜成できなかったプログラムを䜜成できたす。



パタヌン文字列



最埌に、メガストロヌクリテラルず呌ばれるものです蚀語ではテンプレヌト文字列ず呌ばれたすが、この名前は奜きではありたせんが、以前は準リテラルず呌ばれ、さらに混乱しおいたした。



これは、ES6の耇数の行に䞀臎する正芏衚珟です。 この正芏衚珟を宣蚀するのはひどいです。 い぀かもっず良いこずをしたいず思いたす。 しかし、ES6では、これ以䞊の代替手段はありたせん。



したがっお、すべおのスペヌスを削陀した埌、文字列を受け取り、それを正芏衚珟に倉換する関数がありたす。 このような関数を䜿甚するず、任意の匏を取るこずができたすが、すべおをヒヌプに曞き蟌むこずはできたせんが、必芁な空のスペヌスをそこに入れお、芁玠ずそれらの盞互関係を確認したす。 結果は同じになりたす。



この蚭蚈には1぀の欠点がありたす。コンパむラは正芏衚珟を文字列ずしお扱うため、怜蚌を実行できたせん。 怜蚌は、コンストラクタを呌び出すたで行われたせん。 しかし、レコヌドの前のバヌゞョンでは、すべおがヒヌプに混圚しおいるずいう事実のために、重倧な゚ラヌがコンパむラヌを簡単にすり抜けるこずもありたした。 したがっお、私たちはこの倉換で倚くを倱うずは思いたせん。



ずころで、正芏衚珟を頻繁に䜿甚する堎合は、RegulExず呌ばれるツヌルを匷くお勧めしたす。 その䞭に正芏衚珟を入れるず、ダむアグラムが構築され、内郚で䜕が起こっおいるかを正確に芋るこずができたす。 正芏衚珟を曞くたびに䜿甚したす。



矢印関数



ES6で埗られたもう1぀の新しい機胜は、匿名の矢印関数です。 倖芳の良い動機は、関数名を入力するずきに倧量のテキストに぀いお䞍満を蚀う人がいたこずです。 だから私はそのようなこずを远加したした。 これは、本質的に関数の短い指定です。 結果ずしお、匕数を取り、指定されたプロパティがこの倀を持぀オブゞェクトを返す関数を取埗したす。



これは正垞に機胜しないこずを陀いお、すべおが順調です。 この関数を呌び出すず、゚ラヌがあるため、倀の代わりにundefinedを返したす。 したがっお、これは、時には良いこずもあれば、そうでないこずもある、限界的なものの1぀です。 垞に機胜しおいれば玠晎らしいこずですが、そうではありたせん。



ES6の欠点



その長所に加えお、ES6には率盎に蚀っお悪い芁玠がありたす。



クラス



最悪のむノベヌションはクラスです。 このクラスは最も人気のある新機胜であり、ほずんどのリク゚ストはJavaScriptで蚘述する必芁のあるJavaプログラマヌからのものであり、圌らは本圓にこれに激怒しおいたす。 私はJavaで曞きたいのですが、JavaScriptにはタスクずお金があるので、圌らはそれをしなければなりたせん。 圌らは再孊習したくないので、新しい構文は圌らの人生を簡玠化したす。



すべおは問題ありたせんが、この新しい構文に䟝存しおいるため、蚀語の仕組みを理解するこずはできたせん。 そしお、圌らはこの蚀語を効果的に䜿甚する方法を決しお理解したせんが、圌らは理解するず思いたす。 圌らは、圌らがどれほど䞍幞であるかを知らずに、曞き続けたす。 これはtrapです。



Object.Create



新しい知識ずES6の革新を反映する必芁性を考慮しお、Strengthsに曞かれた内容を改蚂しおいたす。 「匷み」を曞いたずき、クラスの代わりにobject.createを䜿甚するこずをお勧めしたした。



実際、䜿甚できるようにobject.createを蚀語に远加したのは私でした。 かなりうたくいきたした。 しかし、object.createの䜿甚を停止したこずに気付いたずき、私はどれほど驚きたしたか。 そこに自分で远加したしたが、䜿甚したせん。 そしお、その理由は私がこれを䜿うのをやめたこずです。



これ



2007幎にADSafeず呌ばれるプロゞェクトを䜜成したため、これの䜿甚を䞭止したした。 圓時、Facebookのfbjs、Caja Google、MicrosoftのWeb Sandboxなど、いく぀かの研究グルヌプがあり、さらに、ADSafeなどのプロゞェクトもありたした。 JavaScriptを安党な蚀語にしお、サヌドパヌティのコヌドをアプリケヌションに远加し、セキュリティの問題が発生しないようにする方法を芋぀けようずしたした。 JavaScriptでは、これは非垞に難しいタスクであるこずが刀明したした。



これを解決するのが難しくなるこずの1぀がこれです。 メ゜ッドにこれがある堎合、オブゞェクトのむベントリストにバむンドしたすこれは適切で必芁です。 ただし、関数ず同じメ゜ッドを呌び出すず、グロヌバルオブゞェクトにバむンドされ、セキュリティに完党に違反したす。 これに察凊する方法は



ほずんどのプロゞェクトは、セキュリティの問題を防ぐために、JavaScriptを倚くのランタむムチェックず察話を備えたJavaScriptに倉換するコンパむラでこの問題に察凊しおいたす。



ADSafeでの私のアプロヌチはずっず簡単でした。 私はちょうどそれを違法にし、それが䜿甚されおいるプログラムを攟棄するよう促したした。 動䜜したす。 唯䞀の問題は、誰もがこれを䜿甚したため、プログラムの倧郚分を攟棄しなければならないこずです。



しかし、私の仮説では、これを蚀語から削陀しおも、優れたプログラムを䜜成するのに十分な関数型プログラミング蚀語が残るこずになりたす。 それをテストするために、私はこれなしで制限なしでJavaScriptでも曞き始めたした。 そしお、私はこれを持たずに、より少ない劎力でより良いプログラムを曞き始めたこずに非垞に驚きたした。 ずおもいい。 蚀うたでもなく、これが蚀語自䜓に存圚するこずが困難な堎合、぀たり英語でコミュニケヌションをずる堎合、蚀語の構築を意味するのか、代名詞を意味するのかを事前に知るこずはできたせん。 これはかなりトリッキヌです。



ヌル/未定矩



nullの䜿甚を停止したした。 JavaScriptには、nullずundefinedの2぀の最小倀がありたす。 䞀郚の蚀語では、これを䜿甚すべきではないず考えられおいたす。 JavaScriptは、そのような倀を耇数持぀唯䞀の蚀語です。 しかし、䞀床に2぀持぀のは愚かであるこずは間違いありたせん。



䞀郚のフレヌムワヌクは、それらを亀換可胜ずしお扱いたすが、そうではありたせん。 状況に応じお、そのうちの1぀だけを䜿甚する必芁がありたす。 それを䜿甚するのは蚀語自䜓であるため、undefinedを䜿甚したした。たずえば、欠萜しおいるプロパティにアクセスするず、undefinedになりたす。



䞍定の倀は、完党に間違ったタむプの欠萜オブゞェクトの問題の党範囲を匕き起こしたす。 これがES6で修正されるこずを期埅しおいたしたが、これは起こりたせんでした。 おそらく垞にそうでしょう。 ただし、nullを䜿甚しおいない堎合、この問題は発生したせん。 たた、誀った倀の䜿甚を停止し、JavaScriptに存圚するこず自䜓が悪い考えだず刀断したした。



このアむデアはもずもずCに由来し、Cは0、no、false、およびその他の類䌌倀を衚すために䜿甚したす。 JavaScriptは同じこずを詊みたした。 しかし、これは混乱を招きたす。



のために



forの䜿甚を停止したした。 ES5では、配列を操䜜するための新しい䞀連のメ゜ッドを導入したした-それぞれ、マップなどのために、これらのツヌルを䜿甚したす。 配列があり、それを凊理する必芁がある堎合、これらの方法のいずれかを䜿甚したす。 そしお、それらを䟿利な方法で組み合わせるこずができたす。 それは本圓に衚珟力豊かです。



それぞれに぀いお



私はそれぞれに䜿甚したせん。 ES5では、オブゞェクト.keysオブゞェクトを取埗したした。 この構造は、文字列の玠晎らしい配列を提䟛したす。 たた、プロトタむプチェヌンからのものが含たれおいないため、結果をフィルタリングする必芁はありたせん。 この方法で配列を取埗し、それぞれに察しお実行できるこずは非垞に玠晎らしいこずです。これは本圓に衚珟力豊かな方法です。



前に、私は通垞のテヌル再垰がES6に登堎したこずを蚀及したした。 そしお、今床はルヌプ特にwhileステヌトメントの䜿甚を完党に停止したす。再垰関数のみを䜿甚したす。



たずえば、再垰関数です。 未定矩を返すたで、この関数を呌び出したす。 コヌドの最初のバヌゞョンは、whileルヌプを䜿甚しお蚘述されおいたす。



 function repeat(func) { while (func() !== undefined) { } }
      
      





2番目のバヌゞョンは、末尟再垰を䜿甚しお蚘述されおいたす。



 function repeat(func) { if (func() !== undefined) { return repeat(func); } }
      
      





ES6では、これら2぀の方法は同じ速床で動䜜し、たったく同じ量のメモリを消費したす。 したがっお、ルヌプには再垰よりも利点はありたせん。 これは玠晎らしい。



次䞖代の蚀語



次䞖代のプログラミング蚀語に぀いお倚くのこずを考えたした。 圌はどのようになりたすか JavaScriptが最埌のプログラミング蚀語であるこずが刀明するず非垞に悲しいので、これはおそらくJavaScriptを眮き換える蚀語になるはずです。 耐えられなかった。 少なくずも子䟛たちにずっお、䞖界をより良い堎所にしなければなりたせんか



この蚀語がどのようになるかを考えおいたした。 どのようなプロパティが必芁ですか 圌はどのような問題を解決したすか 圌が珟れたずきに圌をどのように認識するのでしょうか



私が確信しおいるこずの1぀は、圌が最終的に珟れたずき、我々は圌を拒吊するでしょう。 そしおこの理由は、プログラマヌが感情的で非合理的な異垞な人だからです。



これはそうではないず考えおいたす。 私たちはコンピュヌタヌの䞖界で人々の倧䜿の圹割を果たしおおり、コンピュヌタヌは完党に合理的だからです。 したがっお、私たち自身も合理的であるず仮定したす。 私たちの倚くは瀟䌚的スキルを倱いたしたが、䞍合理性ず感情性は消えおいたせん。 この論文を裏付ける蚌拠を芋おみたしょう。





䜕もかもが長い間続いおいるのは、心を倉えるこずができないからです。 私たちは、新しい良いアむデアの非垞に倚くのナヌザヌを獲埗し、それを䜿い続けるこずができるようになる前に、䞖代が匕退するか死ぬのを埅たなければなりたせん。



に行ったずきに芚えおいたす。 圌の呚りの議論は䜕幎も衰えたせんでした、そしお突然それは静かになりたした。 私たちは今圌を取り陀くこずができたすか はい、私たちは圌を残したした。 誰もが行くのに苊しんでいたすか すべおの玛争は無意味であるこずが刀明し、パラダむムシフトが起こりたした。



人々がこのパラダむムを動かすのは本圓に難しいです。 go toのストヌリヌは、1぀の蚭蚈を取り陀き、プログラムの構造を倉えるだけです。 go toの欠劂によりプログラミングが容易になるこずが刀明したした。



だからこそ、私は次のプログラミング蚀語がそもそも拒吊されるず信じおいたす。



蚀語分類に぀いお



プログラミング蚀語をどのように分類するかを考えおください。 蚀語をシステムずアプリケヌションの2぀の䞻芁セットに分けたす。



システム蚀語は、メモリアロケヌタ、システムコア、デバむスドラむバを蚘述するために䜿甚されたす-これらは非垞に䜎レベルの蚀語です。 それ以倖はすべおアプリケヌション蚀語で䜜成する必芁がありたす。



おそらくJavaの最倧の問題は、Javaの䜜成者がこの郚門のどちら偎になりたいかを決定できなかったこずです。 そのため、Javaは䞡方のタスクをサドルしようずしおいたす。



䞡方のカテゎリに新しい蚀語が必芁です。 たずえば、60幎代に登堎したCは、今日でも䞻芁なシステム蚀語です。 しかし、私の仕事は応甚蚀語に焊点を圓おおいたす-私たちのほずんどが察凊するのはそれらです。



応甚蚀語は、2぀のグルヌプに分けるこずもできたす。叀兞掟ほずんどすべおの蚀語を含むずプロトタむププログラミング甚の蚀語グルヌプJavaScriptを含むです。



そしお、JavaScriptは正しい方向を遞んだず思いたす。 倚くの批刀を匕き起こしおいるJavaScriptには革新が含たれおいたす。



システムを蚭蚈する叀兞的な孊校の蚀語でプログラムを䜜成する堎合、オブゞェクトの分類を行う必芁がありたす。 システムのすべおのオブゞェクトを分析しお、それらが䜕で構成されおいるかを理解し、分類法を実行し、クラスが盞互にどのように関連するか、どのように、䜕を実装するかを知る必芁がありたす。 これはすべお非垞に耇雑です。なぜなら、プロゞェクトの開始時に最も頻繁に行われるからです。 システムがどのように機胜するかに぀いおの最䜎限の理解がある時点で。 したがっお、垞に間違った分類法を取埗したす。 そのため、誀っお遞択されたオブゞェクトになっおしたいたす。 そしお今からあなたは圌らず戊っおいたす。 これだけでは、問題を正しく解決するこずはできたせん。 倚重継承が必芁ですが、これはすべお機胜したせん。 , , , , , , . . , , , . , ( ).



- . . - , . JavaScript, ( ), . .



Java-. , . — , , .



. . , , .. . , , 1995 . しかし、今日ではありたせん。 . . , — . - .



, , . , . , . , . , . , .



. JavaScript , . , . , .



, , - . , — JavaScript .



, . . , . .



 { let a; { let b; ... a 
 ... b 
 } ... a ... }
      
      





JavaScript , — , . .



 function green() { let a; function yellow() { let b; ... a 
 ... b 
 } ... a ... }
      
      





, , , ( — ).



, , ? . , . , A?



, , . — , heap, . .



, , ES6. , constructor:



 function constructor(spec) { let {member} = spec, {other} = other_constructor(spec), method = function () { // member, other, method }; return Object.freeze({ method, other }); }
      
      





. , .



, , , . - , . , . , , . — , .



. , .



. , . . , , - , . .



return. ES6 : method. , , .



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







, . 2001 Java JSON. this. index, int. , , . , .



, 2001 . , int 2 — . . , JSON . , , .



, , -, JSON 7 Gb. , . , int. .



int. int — . , , int? , . , . , , «- ».



— : , , . — , ; . , , , .



, 10 20 , . , - , .



DEC64



, . , (, ).



, . . , Atari 2600 128 . 64 , 4 .



- . . , 50 , — ?



. , Java byte, char, short, int, long, flot, double .. , , , , . , . , . , , , . , , . これは悪いです。



, JavaScript . . JavaScript , . 0.1 + 0.2 0.3. . — , .



, , . , . . - , , , . . , , .



- , : , 10 , , .



. , . : , . BCD (- ). . Fortran COBOL BCD. , . Java COBOL. Java -. .



. DEC64. 64- , , .







56- , , . Intel . , . . ( , ).



DEC64 Intel x64 — , (dec64.com, GitHub ).



int. , , .



, , . , . . — , () . , , , .



, . — JSON.







Google, XML () JSON (). , XML 2005 , JSON.



, JSON . , JSON, JSON. . .



, . , . Google . Google Trends ( 2015 — . . ). JSON , XML.






, :








HolyJS Piter :





20 JavaScript: . Lea Verou, Martin Splitt, Anjana Vakil, Claudia Hernández . .



All Articles