24ãšã³ããªã®ES6ã®è©³çŽ°ãªäžé£ã®ã¡ã¢ã§ã¯ãES6ã®æ§æã®å€æŽãšé©æ°ã®ã»ãšãã©ã«ã€ããŠèª¬æããŠããŸãã ãã®åºçç©ã§ã¯ã以åã®èšäºã§äžèšã®ãã¹ãŠãèŠçŽãããã¹ãŠãäžç·ã«ããäžåºŠèŠãæ©äŒãæäŸããŸãã ãŸããå¿
èŠã«å¿ããŠè©³çŽ°ãããã«ç¢ºèªã§ããããã«ãããã°ã«ãªã³ã¯ãè¿œå ããŸããã
ç®æ¡æžããªã¹ãã奜ãã ãšèããã®ã§ãããã«æ°çŸã®èŠçŽ ã§æ§æããããªã¹ããå«ãèšäºããããŸãã
ãŸããäœãè°è«ãããããæ確ã«ãªãããã«ç®æ¬¡ã瀺ããŸãã æããã«ãç®æ¬¡ãé åºä»ããããŠããªããªã¹ãã§ãã 泚ïŒãã®ãããã¯ãããã«æ·±ãæãäžãããå Žå
ã¯ãäžé£ã®èšäºå
šäœãèªã¿ ãES6ã³ãŒããåå¥ã«ãæãäžããŠããã ããã
å
容âã¯ããã«
âããŒã«ããã
âå²ãåœãŠã®ç Žæ£
âã¹ãã¬ããæŒç®åãšã¬ã¹ããã©ã¡ãŒã¿ãŒ
âç¢å°æ©èœ
âãã³ãã¬ãŒãæåå
âãªããžã§ã¯ããªãã©ã«
âã¯ã©ã¹
âLet and Const
âèšå·
âã€ãã¬ãŒã¿
âãžã§ãã¬ãŒã¿ãŒ
âçŽæ
âããã
âWeakMaps
âã»ãã
âWeakSets
âãããã·
âãªãã¬ã¯ã·ã§ã³
âçªå·
âæ°åŠ
âé
å
âãªããžã§ã¯ã
âæååãšãŠãã³ãŒã
âã¢ãžã¥ãŒã«
ãã®ãããªé·ãç®æ¬¡ã§ããããªããã å§ããŸãã
ã¯ããã«âES6ïŒHarmonyães-nextãES2015ãšãåŒã°ããïŒã¯ãææ°ã®æçµèšèªä»æ§ã§ãã
â2015幎6æã«ES6ã®æçµä»æ§ãæ¿èªãããŸããïŒãã®ããES2015ïŒã
âå°æ¥ã®èšèªããŒãžã§ã³ã«ã¯ãES [YYYY]ãã¿ãŒã³ã«åŸã£ãŠååãä»ããããŸãïŒES7ã®ES2016ãªã©ïŒã
o幎次ãªãªãŒã¹ãµã€ã¯ã«ãäžå¯éçãªå€æŽã¯æ¬¡ã®ãªãªãŒã¹ããæ©èœãå§ããŸãã
o ES6ã¯ãã®ãœãªã¥ãŒã·ã§ã³ãããåã«ç»å Žãããããç§ãã¡ã®ã»ãšãã©ã¯ãŸã ES6ãšåŒãã§ããŸãã
o ES2016ïŒES7ïŒä»¥éã§ã¯ãESãã³ãã¬ãŒã[YYYY]ã䜿çšããŠæ°ããããŒãžã§ã³ãåç
§ããå¿
èŠããããŸãã
oãã®åœåãã¿ãŒã³ã䜿çšããäž»ãªçç±ã¯ããã©ãŠã¶ãŒã®è£œé å
ã«ææ°ã®æŽæ°ããã°ã©ã ãã§ããã ãæ©ãå®è£
ããããå§åããããããšã§ãã
ããŒã«ãããâçŸåšES6ã䜿çšããã«ã¯ãJavaScriptããJavaScriptãžã®ãã©ã³ã¹ããŒã¿ãŒãå¿
èŠã§ãã
âãã©ã³ã¹ããŒã¿ãŒã¯æ¬¡ã®çç±ã§æ¥ãŸããã
oæ°ããããŒãžã§ã³ã®èšèªã®ã³ãŒããå€ãããŒãžã§ã³ã®ã³ãŒãã«ã³ã³ãã€ã«ããæ©èœãæäŸããŸãã
oãã©ãŠã¶ã®ãµããŒããæ¹åãããããES2016ããã³ES2017ãES6ãªã©ã«çœ®ãæããŸãã
oæ¹åããããœãŒã¹ãããã³ã°æ©èœãå¿
èŠã§ãã
oçŸåšãæ¬çªç°å¢ã§ES6ã³ãŒããå®è¡ããæãä¿¡é Œæ§ã®é«ãæ¹æ³ã§ãïŒãã©ãŠã¶ãŒãES5ããµããŒãããŠãããšããäºå®ã«ããããããïŒã
âbabelïŒtranspilerïŒã«ã¯ã人éãèªã¿åããåºåãšãããã©ãŒæ©èœããããŸãã
â
babelã䜿çšããŠãéçãã«ãçšã«ES6ãES5ã«ãã€ãããŸãã
â
babelifyã䜿çšããŠã
ããªã声 ã
gulp ããŸãã¯npmå®è¡ãã«ãããã»ã¹ã«babelãåã蟌ã¿ãŸãã
âéã¿4.xx以äžã®nodejsã䜿çšããŸã-ES6ã«ã¯éåžžã«é©åãªãµããŒãããããŸãïŒv8ã«æè¬ïŒã
ânode.jsã®ä»»æã®ããŒãžã§ã³ã§babel-nodeã䜿çšããŸã-ES5ã§ã¢ãžã¥ãŒã«ããã©ã³ã¹ãã€ã«ããŸãã
âBabelã«ã¯ãES2016ãšããã€ãã®ãã©ã°ã€ã³ãæ¢ã«ãµããŒãããŠããæ¡åŒµãšã³ã·ã¹ãã ããããŸãã
â
ES6ããŒãªã³ã°ã®ç°¡åãªæŽå²ãèªãã§ãã ãã
ãå²ãåœãŠã®ç Žå£âvar {foo} = ponyã¯ãvar foo = pony.fooãšåãã§ãã
âvar {fooïŒbaz} = ponyã¯var baz = pony.fooãšåãã§ã
âããã©ã«ãå€ãèšå®ã§ããŸããvar{foo = 'bar'} = bazã¯fooãè¿ããŸããbaz.fooãæªå®çŸ©ã®å Žåã 'bar'ã«ãªããŸãã
âãšã€ãªã¢ã¹ã®æç¡ã«ãããããã奜ããªã ãããããã£ããã©ãã°ã§ããŸãã
o var {fooãbarïŒbaz} = {fooïŒ0ãbarïŒ1}ã¯fooïŒ0ããã³bazïŒ1ã
âããã«é²ãããšãã§ããŸãïŒvar {fooïŒ{bar}} = {fooïŒ{barïŒ 'baz'}}ã¯barïŒ 'baz'ãäžããŸãã
âããã«ãšã€ãªã¢ã¹ãå²ãåœãŠãããšãã§ããŸããvar{fooïŒ{barïŒdeep}} = {fooïŒ{barïŒ 'baz'}}ã¯ãdeepïŒ 'baz'ãæäŸããŸãã
âèŠã€ãããªãã£ãããããã£ã¯ãæªå®çŸ©ã®å€æ°{foo} = {}ãè¿ããŸãã
âãã¹ããããããããã£ãèŠã€ãããªãã£ãå Žåããšã©ãŒvar {fooïŒ{bar}} = {}ãè¿ãããŸãã
âããã¯é
åã«å¯ŸããŠãæ©èœãã[aãb] = [0ã1]ã¯aïŒ0ããã³bïŒ1ãè¿ããŸãã
âé
åã®èŠçŽ [a ,, b] = [0ã1ã2]ãã¹ãããã§ããŸããaïŒ0ããã³bïŒ2ãååŸããŸãã
â3çªç®ã®ãauxãå€æ°[aãb] = [bãa]ã«é Œããã«å€æ°ã亀æã§ããŸãã
âé¢æ°ãã©ã¡ãŒã¿ãŒã§æ§é åã䜿çšããããšãã§ããŸãã
oããã©ã«ãå€ã®å²ãåœãŠfunction fooïŒbar = 2ïŒ{};
oãããã®å€ã¯ãªããžã§ã¯ãé¢æ°fooïŒbar = {aïŒ1ãbïŒ2}ïŒ{};
o barãå®å
šã«ç Žå£ã§ããŸãïŒfunction fooïŒ{a = 1ãb = 2}ïŒ{};
oäœãæž¡ãããªãã£ãå Žåãããã©ã«ãã§ç©ºã®é
åãååŸããŸãïŒfunction fooïŒ{a = 1ãb = 2} = {}ïŒ{}ã
ES6 JavaScript Destructuring in Depthããèªã¿ãã ãã
ãã¹ãã¬ãããªãã¬ãŒã¿ãŒãšã¬ã¹ããã©ã¡ãŒã¿ãŒâæ®ãã®ãã©ã¡ãŒã¿ãŒã¯åŒæ°ã®ãããªãã®ã§ãããè¯ãã ãã§ãã
oã¡ãœããã·ã°ããã£ã¯ãé¢æ°fooïŒ... everythingïŒ{}ãšããŠå®£èšãããŸãã
oãã¹ãŠãfooã«æž¡ããããã¹ãŠã®ãã©ã¡ãŒã¿ãŒãæã€é
åã§ãã
oãã¹ãŠã®åã«ããã€ãã®ãã©ã¡ãŒã¿ãŒã«ååãä»ããããšãã§ããŸããããšãã°ã次ã®ãšããã§ããfunction fooïŒbarã... restïŒ{};
oãããã®ãã©ã¡ãŒã¿ãŒã¯...æ®ãããé€å€ãããŸãã
o ... restã¯ãªã¹ãã®æåŸã®ãã©ã¡ãŒã¿ãŒã§ããå¿
èŠããããŸãã
âã¹ãã¬ããæŒç®åã¯éæ³ãããåªããŠããŸãããŸãã...æ§æã䜿çšããŠç€ºãããŸãã
oã¡ãœããfnïŒ... [1ã2ã3]ïŒãåŒã³åºããšãã«é©çšããå¿
èŠããªããªããŸã-fnïŒ1ã2ã3ïŒãšåãã§ãã
oåçŽåãããé£çµïŒ[1ã2ã... [3ã4ã5]ã6ã7];
oé
åã®ãããªèŠçŽ ãŸãã¯ã³ã¬ã¯ã·ã§ã³ãé
åã«ãã©ã€ã³ãããããšãã§ããŸã[... document.querySelectorAllïŒ 'img'ïŒ];
o [a ,, ... rest] = [1ã2ã3ã4ã5]ãç Žæ£ããå Žåã«ã䟿å©ã§ããaïŒ1ãšrestïŒ[3ã4ã5];
oã¯ãnew + .applyãã·ã³ãã«ã§æ°ããæ¥ä»ã«ããŸãïŒ... [2015ã31ã8]ïŒã
â
ES6ã¹ãã¬ãããšãã¿ãŒã
詳ããèªã
ãç¢å°é¢æ°âé¢æ°param => returnValueã宣èšããç°¡æœãªæ¹æ³ã
âé¢æ°åããã°ã©ãã³ã°ã«æçšã[1ã2] .mapïŒx => x * 2ïŒã
âããã䜿çšããããã€ãã®ç°ãªãæ¹æ³ããããŸãïŒç¿æ
£ãéçºããã®ã«æéãããããŸãïŒïŒ
âãã©ã¡ãŒã¿ã1ã®å Žåãp1 => exprã¯åªããŠããŸãã
âp1 => exprã«ã¯exprã®æé»çãªreturnã¹ããŒãã¡ã³ãããããŸãã
âæé»çã«ãªããžã§ã¯ããè¿ãã«ã¯ãæ¬åŒ§ïŒïŒ=>ïŒ{fooïŒ 'bar'}ïŒã§å²ãå¿
èŠããããŸããããããªããšããšã©ãŒãçºçããŸãã
â0ã2ããŸãã¯ãã以äžã®ãã©ã¡ãŒã¿ãããå Žåã¯æ¬åŒ§ãå¿
èŠã§ãïŒïŒ=> exprãŸãã¯ïŒp1ãp2ïŒ=> expr;
âå³åŽã®äžæ¬åŒ§ã¯ã³ãŒããããã¯ãè¡šããè€æ°ã®åœä»€ãå«ããããšãã§ããŸãïŒïŒ=> {};
âãã®æ§æã䜿çšããå Žåãæé»ã®æ»ãå€ã¯ãããŸãããèšè¿°ããå¿
èŠããããŸãïŒïŒ=> {return 'foo'}ã
âç¢å°é¢æ°ã«éçã«ååãä»ããããšã¯ã§ããŸããããååã®ãªãã»ãšãã©ã®ã¡ãœããã®ããã©ãŒãã³ã¹ãã¹ãã¯ã¯ããã«åªããŠããŸãã
âç¢å°é¢æ°ã¯èªåœç°å¢ã«é¢é£ä»ããããŠããŸãã
âããã¯ã芪ã®åå¥ç°å¢ãšåãã³ã³ããã¹ãã§ãã
âããã¯ã.callã.applyããŸãã¯ããªãã¬ã¯ã·ã§ã³ãã¿ã€ãã®åæ§ã®ã¡ãœããã䜿çšããŠå€æŽã§ããŸããã
â
ES6 Arrow Functionsã®è©³çŽ°ããèªã¿ãã ãã
ããã¿ãŒã³æååâæååã¯ãsingleããã³doubleã«å ããŠãããã¯ãã£ãã¯ïŒ `ïŒã䜿çšããŠå®£èšã§ããŸãã
âéåŒçšç¬Šã§å²ãŸããæååã¯ãã¿ãŒã³æååã§ãã
âãã³ãã¬ãŒãæååã¯è€æ°è¡ã«ããããšãã§ããŸãã
âãã³ãã¬ãŒãæååã«ãããè©äŸ¡ãå€æ°ã§ãããponyfoo.com is $ {rating}ãã®äžéèšç®ãå¯èœã«ãªããŸãã
âæå¹ãªjsåŒã䜿çšããŠè©äŸ¡ã§ããŸããããšãã°ãã$ {2 * 3}ããŸãã¯ã$ {fooïŒïŒ}ãã§ãã
âããŒã¯ããããã³ãã¬ãŒãã䜿çšããŠãäžéå€ãèšç®ããããã®ããžãã¯ãå€æŽã§ããŸãã
âãã¬ãã£ãã¯ã¹fnãfn`fooã$ {bar}ããã³$ {baz} `ã«è¿œå ããŸãã
âfnã¯ããã³ãã¬ãŒãã...åŒã§1ååŒã³åºãããŸãã
âãã³ãã¬ãŒãã¯['fooã'ã 'and'ã '']ã§ãããåŒã¯[barãbaz]ã§ãã
âçµæfnã¯ãã¿ãŒã³æååã®å€ã«ãªããŸãã
â䜿çšäŸïŒäžèŠãªããŒã¿ããå
¥ååŒãåé€ããããã©ã¡ãŒã¿ãŒã解æãããªã©
âãã³ãã¬ãŒãæååã¯ãéåžžãäžéåŒçšç¬ŠãŸãã¯äºéåŒçšç¬Šã§å²ãŸããæååãããåªããŠããŸãã
â
ES6ãã³ãã¬ãŒããªãã©ã«ã®è©³çŽ°ããèªã¿ãã ãã
ããªããžã§ã¯ããªãã©ã«â{fooïŒfoo}ã®ä»£ããã«ãåçŽã«{foo}-ããããã£ãèšè¿°ããããã®çç¥åœ¢-å€ã®ãã¢ãæžãããšãã§ããŸãã
âèšç®ãããããããã£åïŒ{[prefix + 'Foo']ïŒ 'bar'}ãprefixïŒ 'moz'ã¯{mozFooïŒ 'bar'}ãè¿ããŸãã
â以åã®2ã€ã®æ©èœãåæã«äœ¿çšããããšã¯ã§ããŸããããšã³ããª{[foo]}ã¯ç¡å¹ã§ãã
âã¡ãœããå®çŸ©ã¯ã{fooïŒïŒ{}}æ§æã䜿çšããŠããç°¡æœã«ããããšãã§ããŸãã
âã
ãªããžã§ã¯ããã»ã¯ã·ã§ã³ãåç
§ããŠãã ãã
ãâ
ES6ãªããžã§ã¯ããªãã©ã«æ©èœã®è©³çŽ°ããèªã¿ãã ãã
ãã¯ã©ã¹âãåŸæ¥ã®ãã¯ã©ã¹ã§ã¯ãªãããããã¿ã€ãã®ç¶æ¿ã¡ã«ããºã ã®äžã«ããæ§æç³è¡£ã
âæ§æã¯ãã¯ã©ã¹Foo {}ãªããžã§ã¯ãã®å®£èšã«äŒŒãŠããŸãã
âã€ã³ã¹ã¿ã³ã¹ã¡ãœããnew FooïŒïŒãBarã¯
ããªããžã§ã¯ã
ãªãã©ã«ã¯ã©ã¹Foo {barïŒïŒ{}}ã®ç°¡ç¥åããã
æ§æã䜿çšããŠå®£èšãã
ãŸã ã
âéçã¡ãœãã-Foo.isPonyFooïŒïŒ-ãã¬ãã£ãã¯ã¹ãéçã¯ã©ã¹ããŒã¯ãŒãFoo {staticisPonyFooïŒïŒ{}}ãå¿
èŠã§ãã
âã³ã³ã¹ãã©ã¯ã¿ãŒã¡ãœããã¯ã©ã¹Foo {constructorïŒïŒ{/ *ã€ã³ã¹ã¿ã³ã¹ã®åæå* /}ã
âç°¡ç¥åãããæ§æã¯ã©ã¹PonyFooã䜿çšãããããã¿ã€ãç¶æ¿ã¯ãFoo {}ãæ¡åŒµããŸãã
â
ES6ã¯ã©ã¹ã®è©³çŽ°ããèªã¿ãã ãã
ãLet and Constâletããã³constã¯ãå€æ°ã宣èšãããšãã®varã®ä»£æ¿ã§ãã
âletã¯ã芪é¢æ°ã«é¢ããŠãã¬ãã·ã«ã«ã¹ã³ãŒãã§ã¯ãªããããã¯ã¹ã³ãŒããæã¡ãŸãã
âvarãé¢æ°ã®æäžéšãŸã§äžæããŠããéã«ãletããããã¯ã®æäžéšãŸã§
äžæãããŸãã
âãäžæçãªããããŸãŒã³ããŸãã¯åã«VMZïŒ
âlet foo宣èšãçºçãããããã¯ã®å
é ããéå§ããŸãã
âlet foo宣èšãè¡ãããã³ãŒãå
ã®ãã€ã³ãã§çµäºããŸãïŒããã§ã¯ãã¯ã©ã€ã ãã¯éèŠã§ã¯ãããŸããïŒã
âVMZå
ã§fooã«ã¢ã¯ã»ã¹ãŸãã¯å®çŸ©ããããšãããšïŒlet fooã¹ããŒãã¡ã³ããå®è¡ãããåã«ïŒãšã©ãŒãçºçããŸãã
â宣èšã®åã«å€æ°ã®å€ãå€æŽãããè¬ã®ãã°ã®æ°ãæžããã®ã«åœ¹ç«ã¡ãŸãã
âconstã«ã¯ããriseããšãããããã¯ã¹ã³ãŒãããããVMZã®ã»ãã³ãã£ã¯ã¹ã«åŸããŸãã
âconstå€æ°ã¯ãconståæååfoo = 'bar'ã䜿çšããŠå®£èšããå¿
èŠããããŸãã
âåæååŸã®constã®å®çŸ©ã«ããããµã€ã¬ã³ããšã©ãŒïŒãŸãã¯ã¹ããªã¯ãã¢ãŒãã§ã¯éãµã€ã¬ã³ããšã©ãŒïŒãçºçããŸãã
âå®æ°å€æ°ã¯å€æ°ãäžå€ã«ããŸããïŒ
âconst foo = {barïŒ 'baz'}ã¯ãfooãåžžã«åŒã®å³åŽã®ãªããžã§ã¯ããåç
§ããããšãæå³ããŸãã
âconst foo = {barïŒ 'baz'}; foo.bar = 'boo'ã¯äŸå€ãã¹ããŒããŸããã
âåãååã®å€æ°ã®å®çŸ©ã¯çµäºããŸãã
âå€æ°ãåå®çŸ©ããå
ã®ãªããžã§ã¯ããžã®åç
§ã倱ã£ãå Žåã®ãšã©ãŒãä¿®æ£ããããã«èšèšãããŠããŸãã
âES6ã§ã¯ãé¢æ°ã«ã¯ãããã¯ã¹ã³ãŒãããããŸãã
âããããã¢ãããã¡ã«ããºã ãä»ããããŒã¿æŒæŽ©ã®é²æ¢{let _foo = 'secret'ãbar =ïŒïŒ=> _foo; };
âã»ãšãã©ã®ç¶æ³ã§ã«ã¹ã¿ã ã³ãŒããå£ããªãã§ãã ãããååãšããŠãå¿
èŠãªãã®ã§ãã
â
ES6 LetãConstãããã³ãTemporal Dead ZoneãïŒTDZïŒã詳ããèªãã§ãã ããã