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