é¢æ°åããã°ã©ãã³ã°ã®å©ç¹ã¯ãäžè¬ã®äººã ã«ãã£ãŠé·ãéèªèãããŠããŸããã ãœãããŠã§ã¢ã®éçºã®æåã¯ãå€ãã®å Žåãæ¢åã®ã¡ã«ããºã ãæ倧éã«ç°¡çŽ åããŠãæ°ããã¢ããªã±ãŒã·ã§ã³ãçŸä»£ã®ãŠãŒã¶ãŒã®èŠä»¶ã«é©å¿ã§ããããã«ããããšã§ãã ãããŠåæã«ãç§ãã¡ã¯æ¥ãã§ãç¡å¶éã®å¯èœæ§ãåãã補åãçæéã§æ¶è²»è ã«æ瀺ããå¿ èŠããããŸãã éçºããã¢ããªã±ãŒã·ã§ã³ãããã€ãã®çŽç²ãªæ©èœã«åå²ã§ããæ€èšŒã容æãªå Žåãã¿ã¹ã¯ã«å¯ŸåŠããã®ãã¯ããã«ç°¡åã§ãã ãã®ãããªã¢ã«ãŽãªãºã ã«ã¯ãäžçèŠæš¡ã§ã®çµæã«åºã¥ããŠèšç®ãããããªãããŒãªå¯äœçšãæœè±¡çãªå®åŒåã¯ãããŸããã
ãããã1ã€ã®é¢æ°åèšèªãæ®éçã«èªèãããŠãããšäž»åŒµããŠããããã§ã¯ãªãããã§ãã ç§ã¯ã70幎代ã®Cã®ç¬ç¹ãªäžççèŠæš©ãæå³ããåŸã«C ++ãJavaããããŠæçµçã«JavaScriptã«å ãè²ããŸããã 第2å±€ã®åè£ïŒPythonãPHPãPerlãRubyãCïŒ...ïŒã®ã©ããæ©èœçãªãã®ã®ã«ããŽãªãŒã«åé¡ãããŸããã§ããã
ãããŠãä¿¡ããããªããããªããšãèµ·ãããŸããã ã¯ããClojureã«ã€ããŠè©±ããŠããŸãã
åè«ã§ãïŒ æ°ããæ©èœèšèªãäžçã®èå°ã«ç»å ŽããŠããã«ãªãŒããŒã«ãªã£ããšã¯èª°ãèšããŸããããä»åã¯æããã«ãçªç¶åé¢ã«åºããã£ã³ããªã³ã®æé·ããå¯èœæ§ã«å¯ŸåŠããŠããŸãã çŸåšãReact / Reduxã§ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã®äœæã«åãçµãã§ãããããã«ç§ãæžããã³ãŒãã瀺ããŸãã
aliasesList.reduce((allMatching, matching, index) => { if (matching.count() > 0) { const expanded = allAliases.take(index) .concat(List.of(matching)) .concat(allAliases.skip(index + 1)) .filter(aliases => aliases.count()) .reduce((current, aliases) => current ? current.flatMap( i1 => aliases.map(i2 => i1.concat(i2)) ) : aliases.map(alias => List.of(alias)), null); return allMatching.concat(expanded); } else { return allMatching; } }, new List());
ã§ã¯ããªãã¹ãã·ã£ãªã¹ãã¯é·ãéãé¢æ°åããã°ã©ãã³ã°ãèŠå€±ã£ãŠããã®ã§ããïŒ ãããŠããªãä»æ¥ã§ã¯ãããªã«äžè¬çã«ãªã£ãŠããã®ã§ããïŒ
åè©ã§ããŠã³
æåã®è³ªåã«å¯Ÿããçãã¯ããœãããŠã§ã¢éçºã®äž»ãªåŸåã®1ã€ã«ãã£ãŠå€§éšåã決å®ãããŸãã åæ¥åŸãç§ã¯ãªããžã§ã¯ãæåã®æŽ¥æ³¢ã®æ³¢ã«å®å šã«å§åããããããLISPã§1è¡ãæžããŠããŸããã ãœãããŠã§ã¢éçºè ã®ã³ââãã¥ããã£ã¯ããã®æ¹æ³è«ã究極ã®çå®ãšããŠèªèããŸãã-æ°å¹ŽåŸãJavaã®åºçŸã«ãããå®è·µã¯å®çããã ãã§ãã-ãããŠãäœããã®çç±ã§æ©èœçããã°ã©ãã³ã°ã®å©ç¹ãæ°žç¶çã«ç¡èŠããŸããã
ã«ãã»ã«åãç¶æ¿ãããã³ããªã¢ãŒãã£ãºã ãåããOOPã¯ãæ°ããããã°ã©ã ã®äœæããã»ã¹ã®ç°¡çŽ åã«åžæãäžããŸããã ããããæè¿ããã®æ¹æ³ã®æ¬ é¥ãããæããã«ãªããŸããã ãªããžã§ã¯ãã®å³æ Œãªéå±€ãšæ確ãªã¯ã©ã¹ç¹æ§ã®æ¬ åŠã¯ãOOPã®é²åãèãã劚ããŸããã åŸã ã«ãäžç¢ºå®æ§ã¯äŸå€ãªãããã°ã©ãã³ã°ã®ãã¹ãŠã®ã³ã³ããŒãã³ãã«åã¶ãããæãŸãããªãçžäºéçšæ§ãšäºæž¬äžå¯èœãªå¯äœçšãªãã«ã¯ã§ããŸããã ããã¯ãŸãã«ãé¢æ°åããã°ã©ãã³ã°ã®åè©ãOOPã®åºã«ãªã£ãŠããåè©ã«åã£ãŠä»£ããæ¹æ³ã§ãã
ç§ã¯å°ãåè«ãèšã£ãŠãå°ãåã«Clojureã«èšåããŸããããæè¿ã®é¢æ°åããã°ã©ãã³ã°ã®åŸ©æŽ»ã«è²¢ç®ããã®ã¯ãŸãã«ãã®æ¹èšã§ããã å€ãè¯ãLISPã§ã¯è§£æ±ºã§ããªãã£ãå€ãã®å®çšçãªåé¡ã«ã€ããŠè©±ããšãClojureãšãšãã«æ©èœéçºè ã®äžä»£ãç»å ŽããŸããã ãã®ãããOMãäœæãããŸãããOMãªãã§ã¯ãçŸä»£ã®JSãšã³ã·ã¹ãã ã®é²åãæ³åããããšã¯äžå¯èœã§ãïŒããã«ã€ããŠã¯åŸã§èª¬æããŸãïŒã
JavaScriptã¯ç®ã®åã§æé·ããŠããŸã
OOPã®å€±æã«å ããŠãå ã«è¿°ã¹ã2ã€ã®è³ªåãããã€ãã®è¿œå ã®åŸåã«é¢é£ããŠããŸãïŒæ¬æ Œçãªæ±çšããã°ã©ãã³ã°èšèªãšããŠã®JavaScriptã®åºçŸãšãåºå€§ãªJavaScriptãšã³ã·ã¹ãã ã«ãããé¢æ°åããã°ã©ãã³ã°æ¹æ³è«ã®å å«ã
10幎ã®å€ããç®ã«ããµãŒããŒãäŸç¶ãšããŠã»ãšãã©ã®Webéçºã§éèŠãªåœ¹å²ãæãããŠããäžæ¹ã§ãã¯ã©ã€ã¢ã³ãåŽã®ã¹ã¯ãªãããè£å©æ©èœãå®è¡ããããšãæããã«ãªããŸããã ã¯ããGmailãªã©ã®åã ã®Ajaxã¢ããªã±ãŒã·ã§ã³ã¯ããã©ãŠã¶èªäœã§åäœããåå¥ã®ããŒãžãšããŠã¢ããªã±ãŒã·ã§ã³ã䜿çšããã®ãããã«äŸ¿å©ãã瀺ããŸããããµãŒããŒã¯äž»ã«éäžããŒã¿ãŠã§ã¢ããŠã¹ã§ãã éåžžã®åºå®ã¢ããªã±ãŒã·ã§ã³ãé£æ³ãããé«éWebã¢ããªã±ãŒã·ã§ã³ã¯ãCGIã®ããã°ãåä»»è ããã1æ¡é«ãããšãå€æããŸããã
2008幎ã®Google Chromeã®ãªãªãŒã¹åŸãç¹ã«JavaScriptããã®V8ãšã³ãžã³ã®çºè¡šåŸãåŸåã¯åŒ·ãŸããŸããã é«éJavaScriptã®äœæã¯ãæ¬æ ŒçãªåäžããŒãžã¢ããªã±ãŒã·ã§ã³ãéçºããããã®åææ¡ä»¶ã§ããã ãããŠåã³ãGoogleã¯AngularJSã§ãªãŒãããŠããŸãã V8ã¯ãäž»ã«ãµãŒããŒè£œåã®éçºã«äœ¿çšãããå¥åã®JSãã©ãããã©ãŒã ã§ããNode.jsã§ã®å°äœã匷åããŸããã
çªç¶ãJavaScriptã¯åããã°ã©ãã³ã°èšèªã®ããã«èŠããªããªããŸããã AngularJSãšåæ§ã®éçºãã¡ããªå šäœãããã³Nodeã®ãããã§ãJSãžã®é¢å¿ãéåžžã«é«ãŸã£ãŠãããéå»æ°å¹Žéã§ãã®ããã°ã©ãã³ã°èšèªã«å¯Ÿããä¿¡ããããªãã»ã©ã®éèŠã«ã€ãªãã£ãŠããŸãã
æ©èœãšåœ¢æ
ãããŠãããããã¹ãŠãé¢æ°åããã°ã©ãã³ã°ãšäœã®é¢ä¿ãããã®ã§ããããïŒ Brendan H.ïŒJSã®äœæè ïŒã¯ã1995幎ã«ãã©ãŠã¶ã¹ããŒã ãäœæããããã«Netscapeã«é£ããŠè¡ãããããšãæãåºããŸãã åŸã«è£œåããJavaã«äŒŒãããã®ã«ããããã«èšå®ãããããã¥ã¢ã«ã®èª¬åŸã«åæããå¿ èŠããããŸããããéçºã§ã¯é¢æ°åããã°ã©ãã³ã°èšèªã®éèŠãªç¹æ§ïŒãã¡ãŒã¹ãã¯ã©ã¹é¢æ°ãªã©ïŒãä¿æããŠããŸããã 圌女ã¯ïŒèªåŒµã§ã¯ãããïŒãCæ§æã䜿çšããLISPããšåŒã°ããã
ã€ã³ã¿ãŒãããã«ã¯ç¡æ°ã®äŸããããŸãããã®ãããã§ãJSã®å©ããåããŠãåœä»€åããªããžã§ã¯ãæååããŸãã¯åã«å«ãªã¹ãã²ããã£ã³ãŒããæžãããšãã§ããããšãæããã«ãªããŸããã ãã ããJavaScriptãCã«äŒŒãä»ã®ããã°ã©ãã³ã°èšèªãšæ¯èŒãããšãçã®é¢æ°åèšèªãäœæããããã®åªãããããã¿ã€ãã«ãªããŸãã
2011幎ã«ãæ©èœã³ãã³ããstalwarts mapãããã³ãreduceããJSïŒæè¡çã«ã¯ECMAScriptïŒã«è¿œå ãããŸããã ç°¡æœãªæ§æãšå®å šã«åççãªæ§é ãåããECMAScript 2015ïŒECMAScript 6ïŒã§ã¯ããªããžã§ã¯ãã®äœæããŠãŒã¶ãŒãæ°ã«å ¥ã£ã倪åã®ç¢å°ãªã©ãä»ã®å€ãã®æ©èœçãªããŒã«ãç»å ŽããŸããã ES2015ã®ãã¹ãŠã®æ©èœããã©ãŠã¶ã§ãµããŒããããŠããããã§ã¯ãããŸããããBabelãã©ã³ã¹ã³ã³ãã€ã©ã®ãããã§ãES2015æ©èœïŒããã«ã¯ES2016ïŒã䜿çšããçµæããŠãããŒãµã«ES5ã®åœ¢åŒã§ã³ã³ãã€ã«ã§ãããããããã¯éèŠã§ã¯ãããŸããã
éåžžã®åå¿
AngularJSã¯JavaScriptããŒã ã®å§ãŸãã瀺ããŸãããã補åã¯JavaãšOOPã«æ ¹ãããŠãããããæ©èœéçºã®ã©ã³ã¯ã«èšé²ãã¹ãã§ã¯ãããŸããã éå»æ°å¹Žã«ããã£ãŠãFacebook Reactã¯åªããé«éãªã¯ã©ã€ã¢ã³ãåŽJSãã¬ãŒã ã¯ãŒã¯ã«é²åããŸããã ã¯ããFluxã¢ãŒããã¯ãã£ãšImmutable.jsã©ã€ãã©ãªã®å°è±¡çãªããã©ãŒãã³ã¹ããªããã°ããããFacebookããŒã ã®ã¡ãªããã®1ã€ã§ãïŒæ©èœçãªJSã®éçºã¯ãFacebookãJSãã¬ãŒã ã¯ãŒã¯ã®åžå ŽããGoogleãè¿œãåºãæ¹æ³ãšã©ã®ããã«äžèŽããã®ã§ããããïŒã
Reactã¯ãWebã¢ããªã±ãŒã·ã§ã³ã®éçºã«å¯ŸããŠéåžžã«æ©èœçãªã¢ãããŒããäœæããŠããããã§ãã å®éãReactã®ææ°ããŒãžã§ã³ã§ã¯ãçµ±åã«ãã£ãŠå¯äœçšãçºçããªãçŽç²ãªã³ã³ããŒãã³ãçšã®åçŽåãããæ§æãå°å ¥ãããŸããã
ãã ããReactã¯ããŒã¿ã®è¡šç€ºã®ã¿ãå°éãšããŠãããããFacebookã¯Fluxã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã¢ãŒããã¯ãã£ãæ¡åŒµããããšãæšå¥šããŠããŸãã Fluxã¯åºæ¬çãªèŠçŽ ïŒã¹ãã¬ãŒãžãã¢ã¯ã·ã§ã³ãéäžåãµãŒãã¹ãããŒãžã£ãŒãåæ¹åããŒã¿ãããŒïŒã®ã»ããã«ãããªãããããã®éçºãšåæã«ã競åä»ç€Ÿã¯è¿ éã«ç¬èªã®ä»£æ¿æ¡ãäœæããåéã®ãªãŒããŒã§ãããšäž»åŒµããŸããã ããã«ãReduxãç»å Žããåã¯ããã®ãããªå¹³çãªæŠãã§åè ã¯ããŸããã§ããã
Reduxã¡ã«ããºã ã¯ã次ã®ååã«åºã¥ããŠããŸããåäžã®éäžããŒã¿ãŠã§ã¢ããŠã¹ãç¶æ ã®å€æŽã¯ãç¹å®ã®ã¢ã¯ã·ã§ã³ãšçŽç²ãªæ©èœïŒãªãã¥ãŒãµãŒïŒã®äœ¿çšã®çµæãšããŠã®ã¿å¯èœã§ãã
Immutable.jsãšçµã¿åãããŠäœ¿çšââãããšãReduxã¯ã»ãŒClojure Omã®ååã«ãªããŸãã çè«çã«ã¯ãé¢æ°åããã°ã©ãã³ã°ãšJavaScriptããã€ã§ãçµã¿åãããããšãã§ããŸããããReactãReduxãImmutable.jsã¯ãæçµçã«JSéçºè ã«åé¡ã®å®çšçãªè§£æ±ºçãæäŸããŸãã-å¯äœçšã®ãªãã¯ãªãŒã³ãªã¬ãã¥ãŒãµãŒã®éçºã«ãããES6æ§æã®ãã¬ãŒã ã¯ãŒã¯å ã§è£œåã®äœ¿ãæ £ããç¶æ ãå€æŽã§ããŸã-倧èŠæš¡ãªæ©èœã¢ããªã±ãŒã·ã§ã³ã ãã®ã¢ãããŒãã®äººæ°ïŒãããã£ãŠãé¢æ°åããã°ã©ãã³ã°ã®æ®åïŒã¯é©ãã¹ããã®ã§ããæ°ãæåã«Reduxã§ãªãããšã«åããŠæ°ä»ãããšããGitHubã«ã¯çŽ500åã®æããããŸããã ä»æ¥-11,000以äžã
æ©èœçãªæªæ¥ïŒ
JavaScriptæ©èœãžã®é¢å¿ãé«ãŸãç¶ãããšäž»åŒµããã®ã¯ææå°æ©ã§ãã æè¿ãJSã¯äžå®å®ãªæéãç¹°ãè¿ãçµéšããŠãããããäŸå€çã§ãããšäž»åŒµããæ°ãåããªãã»ã©ã®æ°ãããã¬ãŒã ã¯ãŒã¯ãçªç¶ç»å Žããããªãé¢çœãèŠããŸããã ããããé¢æ°åããã°ã©ãã³ã°ã®è±ããªè¡çµ±ãšæ°ãããã¬ã³ãã®æ ¹æºã¯éåžžã«èª¬åŸåããããŸãã ãŸããåã ã®ãããžã§ã¯ãã¯å€±æããŸããããœãããŠã§ã¢éçºã®æªæ¥ã¯æ©èœããŠããããã§ãã