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 . .

Source: https://habr.com/ru/post/J327320/


All Articles