ããã¯ããã€ãã£ããªããžã§ã¯ããæ¡åŒµã§ãããã©ããã«ã€ããŠã®æ¿ããè°è«ãåŒãèµ·ãããŸããã çºèšè ã®ã»ãŒå šå¡ãå察æèŠãè¿°ã¹ãããšã«éåžžã«é©ããã
ããã«ãããSugarJSãããã§ã¹ãã翻蚳ããããã«ãªããŸããã ã©ãããããã®ã©ã€ãã©ãªã®äœæè ã¯éåžžã«é »ç¹ã«ãã®ãããªæ»æãèãå¿ èŠããããŸããã ãããã£ãŠã圌ã¯éåžžã«æ éãã€ããªãå ¬ç¶ãšãããã®ããããã«ã³ã¡ã³ãããŸããã
ãã®è³æã¯ãããç¥ãããŠããJavaScriptã®èœãšãç©Žãããç解ããŠãããä¿è·æ¹æ³ãæäŸããŸãã ãããã£ãŠããã®èšäºã¯ããã€ãã£ããªããžã§ã¯ããæ¡åŒµããåé¡ã«å¯Ÿããæ 床ã«é¢ä¿ãªããJSéçºè ã«ãšã£ãŠèå³æ·±ãæçšãªãã®ã«ãªããšæããŸãã
ç§ã¯åºãã¢ã³ããªã¥ãŒã»ãã©ããŒã«æž¡ããŸãã
ãããã£ãŠãSugarã¯ãã€ãã£ãJavaScriptãªããžã§ã¯ããå€æŽããã©ã€ãã©ãªã§ãã åŸ ã£ãŠãæªãããªãïŒ ãããããããŸããPrototypeã®èŠãçµéšããåŠãã ããšã¯ãããŸãããïŒ
ããã«ã¯å€ãã®èª€è§£ããããŸãã ç ç³ã¯ãPrototypeãå¶ç¶èŠã€ããèœãšãç©Žãåé¿ããæ¬è³ªçã«æ ¹æ¬çã«ç°ãªããŸãã ãã ãããã®éžæã«ã¯çµæããªãããã§ã¯ãããŸããã ãã€ãã£ããªããžã§ã¯ãã®å€æŽã«ãã£ãŠåŒãèµ·ããããæœåšçãªåé¡ã以äžã§èª¬æããããããã«ã€ããŠã®Sugarã®ç«å Žã説æããŸãïŒ
- ç°å¢ãªããžã§ã¯ãã®å€æŽ
- åæããããã£ãšããŠã®æ©èœ
- ããããã£ã®ãªãŒããŒã©ã€ã
- ã°ããŒãã«åå空éã§ã®ç«¶å
- ããããã£ã®æ¬ åŠã«é¢ããä»®å®
- ã³ã³ãã©ã€ã¢ã³ã¹
1.ç°å¢ãªããžã§ã¯ãã®å€æŽ
åé¡ïŒ
ããã¹ããªããžã§ã¯ãããšããçšèªã¯ãã³ãŒããå®è¡ãããç°å¢ã«ãã£ãŠæäŸãããJavaScriptãªããžã§ã¯ããæå³ããŸãã ãã¹ããªããžã§ã¯ãã®äŸïŒã€ãã³ããHTMLElementãXMLHttpRequestã å³å¯ã«ä»æ§ã«åŸããã€ãã£ãJavaScriptãªããžã§ã¯ããšã¯ç°ãªããç°å¢ãªããžã§ã¯ãã¯ãã©ãŠã¶ãŒéçºè ã®è£éã§å€æŽã§ããç°ãªããã©ãŠã¶ãŒã§ã®å®è£ ã¯ç°ãªãå ŽåããããŸãã
詳现ã«è§Šããã«ãç°å¢ãªããžã§ã¯ããå€æŽãããšãã³ãŒãã«ãšã©ãŒãçºçãããããªããé床ãäœäžããç°å¢ã®å°æ¥ã®å€æŽã«å¯ŸããŠè匱ã«ãªãå¯èœæ§ããããŸãã
ã·ã¥ã¬ãŒããžã·ã§ã³ïŒ
Sugarã¯ããã€ãã£ãJavaScriptãªããžã§ã¯ãã§ã®ã¿æ©èœããŸãã ç°å¢ãªããžã§ã¯ãã¯åœŒã«ãšã£ãŠé¢çœããªãïŒãŸãã¯ãããæ£ç¢ºã«ã¯ãæªç¥ïŒã ãã®ãã¹ã¯ããã¹ããªããžã§ã¯ãã«é¢ããåé¡ãåé¿ããããã ãã§ãªãããã©ãŠã¶ã®å€éšã§åäœããç°å¢ãå«ãå€æ°ã®JavaScriptç°å¢ããã©ã€ãã©ãªã«ã¢ã¯ã»ã¹ã§ããããã«ããããã«éžæãããŸãã
翻蚳è ããïŒNodeãªããžããªã®Sugarã¢ãžã¥ãŒã«ã¯æ¬¡ã®ãšããã§ãã
2.åæããããã£ãšããŠã®æ©èœ
åé¡ïŒ
ææ°ã®ä»æ§ã«æºæ ããŠããªããã©ãŠã¶ã§ã¯ãæ°ããããããã£ã®å®çŸ©ã«ããåæå¯èœã«ãªããŸãã ãµã€ã¯ã«ããªããžã§ã¯ãã®ããããã£ã暪æãããšããæ°ããããããã£ã¯ããŒã¿ãå«ãããããã£ãšãšãã«åœ±é¿ãåããŸãã
詳现
ããã©ã«ãã§ã¯ããªããžã§ã¯ããæ°ããããããã£ãå®çŸ©ãããšãåæå¯èœã«ãªããŸãã ãããã£ãŠãããŒã¿ããªããžã§ã¯ãã«ä¿åããããããã«ãŒãããŸãã
é¢æ°ãæ°ããããããã£ãšããŠå²ãåœãŠãïŒãŸãã¯ãOOPèšèªã䜿çšããã«ã¯ããªããžã§ã¯ãã«ã¡ãœãããè¿œå ããïŒãšããã®é¢æ°ãåæãããŸãã
ãã®çµæãã«ãŒãã䜿çšããŠãªããžã§ã¯ãã®ããããã£ã移åãããšãäºæããªãçµæãçããŸãããããã¯ãŸã£ããæãŸãããããŸããã 幞ããªããšã«ããããã«ç°ãªãæ§æã§ãåæäžå¯èœãªã¡ãœãããå®çŸ©ã§ããŸãã
ãããããã€ãã®ããã«ããã£ããããããŸãã åæäžå¯èœãªããããã£ãå®çŸ©ããæ©èœã¯ãInternet Explorer 8以äžã§ã¯äœ¿çšã§ããŸããã
ããã§ãéåžžã®ãªããžã§ã¯ãã®ããããã£ã®åæã§ç解ãããŸããããé åã¯ã©ãã§ããïŒ éåžžãã«ãŠã³ã¿ãŒã®ããéåžžã®
ã«ãŒãã䜿çšããŠãé åã®å€ãèµ°æ»ããŸãã
ã芧ã®ãšãããããããã£ã®åæã«é¢ããåé¡ã¯ãåã«ã«ãŠã³ã¿ãŒãåãã ãã§åé¿ã§ããŸãã
ã䜿çšããŠãªããžã§ã¯ãããã€ãã¹ãããšãåæãããããããã£ã¯ã«ãŒãã«å ¥ããŸãã
ãã®ããã
ã®åœ¢åŒã®ãµã€ã¯ã«ã§ããããã£åïŒããã³ã€ã³ããã¯ã¹çªå·ã«ããé åã®å€ïŒã§ãªããžã§ã¯ãã®ããããã£ã«ã¢ã¯ã»ã¹ããå Žåã
ã¡ãœããã䜿çšããå¿ èŠããããŸãã ããã«ããããªããžã§ã¯ãã«çŽæ¥å±ããªããããããã¿ã€ããã§ãŒã³ãéããŠç¶æ¿ãããããããã£ãé€å€ãããŸãã
ããã¯ãJavaScriptã®åªãããã©ã¯ãã£ã¹ã®æãäžè¬çãªäŸã®1ã€ã§ãã ããããã£åã§ãªããžã§ã¯ãããããã£ãåç §ããå Žåã¯ãåžžã«äœ¿çšããŸãã
翻蚳è ããïŒ
èè ã¯ãé åãèµ°æ»ããå¥ã®æ¹æ³ïŒ
ãããããšã«èšåããŠããŸããã ã¯ã€ãã¯æ€çŽ¢ã®çµæãMozilla Developer Networkããããªãã£ã«ãèŠã€ãããŸããããã®ããªãã£ã«ã¯ä»æ§ã«åŸã£ãŠã¢ã«ãŽãªãºã çã«åçŸããŠããŸãïŒãããŠã次ã®ãªã³ã¯ãããããããã«ããã€ãã£ã
ãšåãããã©ãŒãã³ã¹ãæã£ãŠããŸãïŒã ããªãã£ã«ã³ãŒãã¯ãæåã®ïŒå®å šãªïŒæ¹æ³ã䜿çšããŠé åãèµ°æ»ããŸãã åæã«ã
ãè¿œå ã®ãã§ãã¯ãããããã«ãã«ãŠã³ã¿ãŒã䜿çšããåçŽãª
ã«ãŒããããæããã«é ãããšãç¥ãããŠããŸãã
ã¯ããã¹ãŠã®ææ°ã®ã¢ãã€ã«ããã³ãã¹ã¯ããããã©ãŠã¶ãŒã§äœ¿çšã§ããŸãã IE8以äžã§ã¯äœ¿çšã§ããŸããã
var o = {}; o.name = "Harry"; for(var key in o) { console.log(key); } // => name
é¢æ°ãæ°ããããããã£ãšããŠå²ãåœãŠãïŒãŸãã¯ãOOPèšèªã䜿çšããã«ã¯ããªããžã§ã¯ãã«ã¡ãœãããè¿œå ããïŒãšããã®é¢æ°ãåæãããŸãã
Object.prototype.getName = function() { return this.name; }; for(var key in {}) { console.log(key); } // => getName
ãã®çµæãã«ãŒãã䜿çšããŠãªããžã§ã¯ãã®ããããã£ã移åãããšãäºæããªãçµæãçããŸãããããã¯ãŸã£ããæãŸãããããŸããã 幞ããªããšã«ããããã«ç°ãªãæ§æã§ãåæäžå¯èœãªã¡ãœãããå®çŸ©ã§ããŸãã
Object.defineProperty(Object.prototype, 'getName', { value: function() { return this.name; }, enumerable: false }); for(var key in {}) { console.log(key); } // => ()
ãããããã€ãã®ããã«ããã£ããããããŸãã åæäžå¯èœãªããããã£ãå®çŸ©ããæ©èœã¯ãInternet Explorer 8以äžã§ã¯äœ¿çšã§ããŸããã
ããã§ãéåžžã®ãªããžã§ã¯ãã®ããããã£ã®åæã§ç解ãããŸããããé åã¯ã©ãã§ããïŒ éåžžãã«ãŠã³ã¿ãŒã®ããéåžžã®
for
ã«ãŒãã䜿çšããŠãé åã®å€ãèµ°æ»ããŸãã
Array.prototype.name = 'Harry'; var arr = ['a','b','c']; for(var i = 0; i < arr.length; i++) { console.log(arr[i]); } // => 'a' // => 'b' // => 'c'
ã芧ã®ãšãããããããã£ã®åæã«é¢ããåé¡ã¯ãåã«ã«ãŠã³ã¿ãŒãåãã ãã§åé¿ã§ããŸãã
for..in
ã䜿çšããŠãªããžã§ã¯ãããã€ãã¹ãããšãåæãããããããã£ã¯ã«ãŒãã«å ¥ããŸãã
Array.prototype.name = 'Harry'; var arr = ['a','b','c']; for(var key in arr) { console.log(arr[key]); } // => 'a' // => 'b' // => 'c' // => 'Harry'
ãã®ããã
for..in
ã®åœ¢åŒã®ãµã€ã¯ã«ã§ããããã£åïŒããã³ã€ã³ããã¯ã¹çªå·ã«ããé åã®å€ïŒã§ãªããžã§ã¯ãã®ããããã£ã«ã¢ã¯ã»ã¹ããå Žåã
hasOwnProperty
ã¡ãœããã䜿çšããå¿ èŠããããŸãã ããã«ããããªããžã§ã¯ãã«çŽæ¥å±ããªããããããã¿ã€ããã§ãŒã³ãéããŠç¶æ¿ãããããããã£ãé€å€ãããŸãã
Array.prototype.name = 'Harry'; var arr = ['a','b','c']; for(var key in arr) { if(arr.hasOwnProperty(key)) { console.log(arr[key]); } } // => 'a' // => 'b' // => 'c'
ããã¯ãJavaScriptã®åªãããã©ã¯ãã£ã¹ã®æãäžè¬çãªäŸã®1ã€ã§ãã ããããã£åã§ãªããžã§ã¯ãããããã£ãåç §ããå Žåã¯ãåžžã«äœ¿çšããŸãã
翻蚳è ããïŒ
èè ã¯ãé åãèµ°æ»ããå¥ã®æ¹æ³ïŒ
Array.prototype.forEach
ãããããšã«èšåããŠããŸããã ã¯ã€ãã¯æ€çŽ¢ã®çµæãMozilla Developer Networkããããªãã£ã«ãèŠã€ãããŸããããã®ããªãã£ã«ã¯ä»æ§ã«åŸã£ãŠã¢ã«ãŽãªãºã çã«åçŸããŠããŸãïŒãããŠã次ã®ãªã³ã¯ãããããããã«ããã€ãã£ã
forEach
ãšåãããã©ãŒãã³ã¹ãæã£ãŠããŸãïŒã ããªãã£ã«ã³ãŒãã¯ãæåã®ïŒå®å šãªïŒæ¹æ³ã䜿çšããŠé åãèµ°æ»ããŸãã åæã«ã
forEach
ãè¿œå ã®ãã§ãã¯ãããããã«ãã«ãŠã³ã¿ãŒã䜿çšããåçŽãª
for
ã«ãŒããããæããã«é ãããšãç¥ãããŠããŸãã
forEach
ã¯ããã¹ãŠã®ææ°ã®ã¢ãã€ã«ããã³ãã¹ã¯ããããã©ãŠã¶ãŒã§äœ¿çšã§ããŸãã IE8以äžã§ã¯äœ¿çšã§ããŸããã
ã·ã¥ã¬ãŒããžã·ã§ã³ïŒ
Sugarã¯ãå¯èœãªéããã€ãŸããã¹ãŠã®ææ°ãã©ãŠã¶ãŒã§ã¡ãœãããåæäžå¯èœã«ããŸãã ãã ããIE8ãå®å šã«ãªããªããŸã§ããã®åé¡ã«åžžã«çæããå¿ èŠããããŸãã ãã®ã«ãŒãã¯ããããã£ãã«ãŒãããããšã«ãããã«ãŒãããããšãã§ãã2ã€ã®äž»ãªã¿ã€ãã®ãªããžã§ã¯ããã€ãŸãéåžžã®ãªããžã§ã¯ããšé åãåå¥ã«èæ ®ããå¿ èŠããããŸãã
ãã®åé¡ã®ããïŒããã³ããããã£ããªãŒããŒã©ã€ãããåé¡ã®ããïŒãäžèšã®äŸã§è¡ãããŠããããã«ãSugarã¯Object.prototypeãå€æŽããŸããã ããã¯ãéåžžã®JavaScriptãªããžã§ã¯ãã§
for..in
ã«ãŒãã䜿çšããŠããæªç¥ã®ããããã£ãååšããªãããã«ã«ãŒãã«å ¥ãããšã¯æ±ºããŠãªãããšãæå³ããŸãã
é åã®å Žåãç¶æ³ã¯ããè€éã§ãã é åããã©ããŒã¹ããæšæºçãªæ¹æ³ã¯ãåçŽãª
for
ã«ãŒãã䜿çšããããšã§ããããã¯ãå埩ããšã«ã«ãŠã³ã¿ãŒã1ã€ãã€å¢ããããããããããã£åãšããŠäœ¿çšããŸãã ãã®æ¹æ³ã¯å®å šã§ãããåââé¡ãçºçããŸããã
for..in
ã«ãŒãã䜿çšããŠé åãèµ°æ»ããããšãã§ããŸãããããã¯è¯ãæ¹æ³ãšã¯èŠãªãããŸããã ãã®æ¹æ³ã䜿çšããå Žåã¯ã
hasOwnProperty
ã¡ãœããã䜿çšããŠãããããã£ããªããžã§ã¯ãã«çŽæ¥å±ããŠãããã©ããã確èªããŠãã ããïŒäžèšã®ããããããŠã³ã®æåŸã®äŸãåç §ïŒã
for..in
é åãèµ°æ»ãã
hasOwnProperty
ãã§ãã¯ãè¡ããªãããšã¯ãæªãç¿æ £ã®äžã§ã¯æªãç¿æ £ã§ããããšã
for..in
ãŸããã ãã®ãããªã³ãŒããå€ããã©ãŠã¶ãŒïŒIE8以åïŒã§å®è¡ããããšãSugarã¡ãœãããå«ããªããžã§ã¯ãã®ãã¹ãŠã®ããããã£ãã¯ããŒã«ããããããåé¡ãååšããããšã«æ³šæããããšãéèŠã§ãã Sugarãå«ãŸããŠãããšãã«ãããžã§ã¯ããå£ããå Žåãæåã«ç¢ºèªããå¿ èŠãããã®ã¯ãã«ãŒãå ã®ãªããžã§ã¯ãã®ããããã£ãæ£ãããã€ãã¹ãããã©ããã§ãã ãã®åé¡ã¯ãSugarã ãã®åé¡ã§ã¯ãªããé åã¡ãœããã«ããªãã£ã«ãæäŸãããã¹ãŠã®ã©ã€ãã©ãªã®å Žåã«åœãŠã¯ãŸãããšã泚ç®ã«å€ããŸãã
ãããã« é åã暪æããããã®åé¡ã®ããã³ãŒããæžãæããããšãã§ãããIE8以äžã®ãµããŒããéèŠã§ããå ŽåãSugarã©ã€ãã©ãªã®Arrayããã±ãŒãžã䜿çšããããšã¯ã§ããŸããã ãã®ããã±ãŒãžãé€å€ããŠãSugarã¢ã»ã³ããªããã«ãããŸã ã
3.ããããã£ã®ãªãŒããŒã©ã€ã
åé¡ïŒ
JavaScriptã§ã¯ãã»ãšãã©ãã¹ãŠã®ãšã³ãã£ãã£ããªããžã§ã¯ãã§ããã€ãŸããããŒãšå€ã®ãã¢ã®åœ¢åŒã§ããããã£ãæã€ããšãã§ããŸãã JavaScriptã§ã¯ããããã·ã¥ãïŒããã·ã¥ããŒãã«ãèŸæžãé£æ³é åïŒã¯éåžžã®ãªããžã§ã¯ãã§ããããã¡ãœãããã¯ããŒã¿ã§ã¯ãªããªããžã§ã¯ãã®ããããã£ã«å²ãåœãŠãããé¢æ°ã§ãã è¯ããæªããããªããžã§ã¯ãã«å¯ŸããŠå®£èšãããã¡ãœããïŒãããã¿ã€ããã§ãŒã³ã«æ²¿ã£ãŠçŽæ¥ãŸãã¯ããã«ïŒãããããã£ã§ãããããŒã¿ãšåãæ¹æ³ã§ã¢ã¯ã»ã¹ãããŸãã
åé¡ãæããã«ãªãã€ã€ãããŸãã ããšãã°ããã¹ãŠã®ãªããžã§ã¯ãã«å¯ŸããŠ
count
ã¡ãœãããå®çŸ©ããäžéšã®ãªããžã§ã¯ãã«å¯ŸããŠåãååã®ããããã£ã«ããŒã¿ãæžã蟌ããšãã¡ãœããã¯äœ¿çšã§ããªããªããŸãã
Object.prototype.count = function() {}; var o = { count: 18 }; o.count // => 18
ãªããžã§ã¯ãã«å¯ŸããŠçŽæ¥å®çŸ©ããã
count
ããããã£ã¯ããããã¿ã€ããã§ãŒã³ã®ããã«äžã«ããåãååã®ã¡ãœãããèŠãé ããŸãïŒãªãªãžãã«ã§ã¯ãã·ã£ããŠããã£ã¹ãã-ãã·ã£ããŠã€ã³ã°ãã§ãïŒã ãã®çµæããã®ãªããžã§ã¯ãã®ã¡ãœãããåŒã³åºãããšãã§ããªããªããŸãã
ã·ã¥ã¬ãŒããžã·ã§ã³ïŒ
åæåããããã£ã®åé¡ãšãšãã«ããããSugarã
Object.prototype
å€æŽããªãäž»ãªçç±
Object.prototype
ã 䜿çšãããªããžã§ã¯ãã®ã¡ãœãããäºåã«ç¥ã£ãŠããŠãåãååã®ããããã£ã®äœ¿çšãé¿ããããšã«ãããšããŠããã³ãŒãã¯äŸç¶ãšããŠè匱ã§ããããªãŒããŒã©ã€ããããããããã£ã®ãããã°ã¯æ¥œããã¿ã¹ã¯ã§ã¯ãããŸããã
代ããã«ãSugarã¯
Object
ã¯ã©ã¹ã®éçã¡ãœãããšããŠåçŽãªãªããžã§ã¯ãã®ãã¹ãŠã®ã¡ãœãããè¡šãããšã奜ã¿ãŸãã JavaScriptãããããã£ãšã¡ãœãããåºå¥ãããŸã§ããã®ã¢ãããŒãã¯å€ãããŸããã
翻蚳è ããïŒ
å¿ èŠã«å¿ããŠãéåžžã®ãªããžã§ã¯ããæäœããããã®Sugarã¡ãœãããç¹å®ã®ãªããžã§ã¯ãã®ããããã£ã«è»¢éã§ããŸãã ããã¯
Object.extended()
ã䜿çšããŠè¡ãããŸãïŒ
var foo = {foo: 'foo'}, bar = {bar: 'bar'}; foo = Object.extended(foo); foo.merge(bar); console.log(foo); // => {foo: 'foo', bar: 'bar'}
4.ã°ããŒãã«åå空éã§ã®ç«¶å
åé¡ïŒ
ã°ããŒãã«ãªåå空éã«ååšããå Žåãã¹ãã¬ã¹ã®äž»ãªåå ã¯åå®çŸ©ããããšããæžå¿µã§ãã ã³ãŒããæžããšããä»ã®äººã®æ¹æ³ãç Žãæ¹æ³ã®ãªã¹ã¯ãšã誰ããããªãã®æ¹æ³ãç Žããšããäºå®ãåžžã«ãããŸãã
ã·ã¥ã¬ãŒããžã·ã§ã³ïŒ
ãŸãããã®åé¡ã®æ¬è³ªãæ£ç¢ºã«ç¹å®ããããšãéèŠã§ããããã¯èªèã®åé¡ã§ãã ããªãããããžã§ã¯ãã®å¯äžã®éçºè ã§ããå Žåããããã¿ã€ãã®å€æŽã¯æå°éã®ãªã¹ã¯ãã䌎ããŸãããäœãã©ã®ããã«å€æŽããããç¥ã£ãŠããããã§ãã ããŒã ã§äœæ¥ããŠããå Žåããã¹ãŠãèªèããŠãããšã¯éããŸããã
éçºè VasyaãšPetyaããåãããšããããååãç°ãªã2ã€ã®ã¡ãœãããåããããã¿ã€ãã§å®çŸ©ããå Žåããããã¯äžè²«ããŠåäœããŸãããç¯çœªè ã¯ããŸããã ç°ãªãã¿ã¹ã¯ãå®è¡ããåãååã®2ã€ã®ã¡ãœãããå®çŸ©ãããšããããžã§ã¯ããäžæãããŸãã
Sugarã®äŸ¡å€ã¯ããšãããããããã¿ã€ãã«å°ããªãã«ããŒã¡ãœãããè¿œå ããããšãå¯äžã®ç®çãšããåäžã®æšæºAPIãæäŸããããšã§ãã çæ³çã«ã¯ããã®ã¿ã¹ã¯ã¯1ã€ã®ã©ã€ãã©ãªïŒSugarãŸãã¯ä»ã®ã©ã€ãã©ãªïŒã«å¯ŸããŠã®ã¿ä¿¡é Œãããã¹ãã§ãã ããªããåããŠã§ãã¿ã¹ã¯ãããŸãæ確ã§ã¯ãªãã°ããŒãã«åå空éã®åéã«æ°ãããã¬ãŒã€ãŒã玹ä»ããããšã¯ããªã¹ã¯ãé«ããããšãæå³ããŸãã ããã¯ããã¡ãããããã«åé¡ã«ééãããšããæå³ã§ã¯ãããŸããã ãªã¹ã¯ã®çšåºŠã¯ãããªãã®èªèã®çšåºŠãšçžé¢ããå¿ èŠããããŸãã
ã©ã€ãã©ãªããã©ã°ã€ã³ãããã³ãã®ä»ã®ããã«ãŠã§ã¢ã¯åãçç±ã§Sugarã䜿çšããªãã§ãã ãã ã ã°ããŒãã«ãªããžã§ã¯ãã®å€æŽã¯ããšã³ããŠãŒã¶ãŒãæèçã«æ±ºå®ããå¿ èŠããããŸãã ã©ã€ãã©ãªã®äœæè ããŸã Sugarã䜿çšããããšã«æ±ºããå ŽåããŠãŒã¶ãŒã«ãããéåžžã«ç®ã«èŠããå Žæã§ç¥ãããå¿ èŠããããŸãã
翻蚳è ããïŒç¹ã«ãSugarãUnderscoreãããã³åæ§ã®ã©ã€ãã©ãªãªã©ã®ãªãã·ã§ã³ã®äŸåé¢ä¿ãã§ããã ãå°ãªãããããã«ãã©ã®ã©ã€ãã©ãªãåªåãã¹ãã ãšæããŸãã çŽç²ãªJavaScriptã§æžãæããããšãã§ããªããã®ã¯äœãããŸããã ã©ã€ãã©ãªã®äœæè ã«ãããã®ã«ãŒã«ã®ä¹±çšã¯ããããžã§ã¯ãã«éè€ããå®å šã«åé·ãªæ©èœãæã€äŸåé¢ä¿ã®æ··ä¹±ãçãããšããäºå®ã«ã€ãªããå¯èœæ§ããããŸãïŒLazy.jsãUnderscoreãLo-Dashãwu.jsãSugarãLinq.jsãJSLINQãFrom .jsãIxJSãBoiler.jsãsloth.jsãMooTools ...ãããã£ãŠããããã«ãŠã§ã¢ã§Sugarã䜿çšããªãããšããæšå¥šäºé ã¯ãä»ã®ã©ã€ãã©ãªã§ãæå¹ã§ãã
5.ããããã£ã®æ¬ åŠã«é¢ããä»®å®
åé¡ïŒ
ã°ããŒãã«åå空éã§ã®ç«¶åã¯ã©ãã»ã©å±éºãªã®ããã°ããŒãã«åå空éã«å«ãŸããïŒãŸãã¯å«ãŸããªãïŒãã®ã«é¢ããä»®å®ãåæ§ã§ãã
æååãšãªããžã§ã¯ãã®2çš®é¡ã®åŒæ°ãåãããšãã§ããé¢æ°ããããšæ³åããŠãã ããã ãªããžã§ã¯ããé¢æ°ã«æž¡ãããå Žåããªããžã§ã¯ããæã€ç¹å®ã®ããããã£ããæååãååŸããå¿ èŠããããŸãã ãããã£ãŠãåŒæ°ã«ãã®ããããã£ããããã©ããã確èªããŸãã
function getName(o) { if(o.first) { return firstName; } else { return lastName; } }
ãã®äžèŠåçŽãªã³ãŒãã¯ã
first
ããããã£ããªããžã§ã¯ãã®ãããã¿ã€ããã§ãŒã³å ã®ã©ãã§ãïŒæååã§ãã£ãŠãïŒå®çŸ©ãããªããšããæé»ã®ä»®å®ãããŠããŸãã ãã¡ããã
Object.prototype
ãš
String.prototype
ã¯ã°ããŒãã«ãªããžã§ã¯ãã§ããã誰ã§ãå€æŽã§ããããã誰ããããä¿èšŒããŸããã
ãã€ãã£ããªããžã§ã¯ãã®å€æŽã«å察ããå Žåã§ããäžèšã®äŸã®ããã«ãã°ããŒãã«ããŒã ã¹ããŒã¹ã®å 容ã«ã€ããŠæ³å®ããã³ãŒããæžãäœè£ã¯ãããŸããã ãã®ãããªã³ãŒãã¯è匱ã§ãããåââé¡ãåŒãèµ·ããå¯èœæ§ããããŸãã
ã·ã¥ã¬ãŒããžã·ã§ã³ïŒ
æåŸã®äŸã®ã³ãŒããä¿®æ£ããããšã¯ãŸã£ããé£ãããããŸããã ããªãã¯ãã§ã«ãœãªã¥ãŒã·ã§ã³ã«ç²ŸéããŠããŸãïŒ
function getName(o) { if(o.hasOwnProperty('first')) { return firstName; } else { return lastName; } }
ããã§ãé¢æ°ã¯ããããã¿ã€ããã§ãŒã³å ã®ãã¹ãŠã®ããããã£ã§ã¯ãªããæž¡ããããªããžã§ã¯ãã«å¯ŸããŠçŽæ¥å®£èšãããããããã£ã®ã¿ããã§ãã¯ããŸãã ããã«é²ãã§ããŸããŸãªããŒã¿åã®è»¢éãé²ãããšãã§ããŸããããã®ãããªåçŽãªãã§ãã¯ã§ãããã°ããŒãã«åå空éã®å€æŽã«é¢é£ããåé¡ãåé¿ããã®ã«ååã§ãã
Sugarã¯ããã®åç¶æéäžã«ã jqueryïŒ1140ãšmongooseïŒ482ã® 2ã€ã®å€§ããªã©ã€ãã©ãªã®ã³ãŒãã§ãã®åé¡ãåŒãèµ·ãããŸããã äž¡æ¹ã®å Žåã®ç¯äººã¯ãæåããªãã£ãã·ã¥ã¬ãŒã¡ãœããã§ããã åãã§ååãå€æŽããã®ã§ãåé¡ã解決ããŸããã ããã«ãã©ã€ãã©ãªãŒã®1ã€ïŒjQueryïŒã¯ããã®åŽã®æ¬ é¥ãæé€ããããã«ãç§ãã¡ãšäžç·ã«åé¡ã«åãçµã¿ãŸããã
Sugarã¯ã°ããŒãã«ãªç¯å²ã§éåžžã«æ£ç¢ºã«åäœããããšããŸãããã©ã€ãã©ãªã®äœæè éã®ååãªãã«è¡ãæ¹æ³ã¯ãããŸããã åé¡ã®æ ¹æ¬ã¯JavaScriptèªäœã®æ§è³ªã§ãããããããã£ãšã¡ãœãããåºå¥ããŸããã
6.ä»æ§ãžã®æºæ
åé¡ïŒ
ECMAScriptä»æ§ã¯ããã€ãã£ãã¡ãœããã®åäœãå®çŸ©ããæšæºã§ãã JavaScriptã©ã³ã¿ã€ã éçºè ã¯ããã€ãã£ãã¡ãœãããæ£ç¢ºãã€ææ°ã§ããããšãæãã§ããŸãã ãããã£ãŠã2ã€ã®ããšãéèŠã§ããã¡ãœããã¯åžžã«ä»æ§ã«åŸã£ãŠåäœããå°æ¥ä»æ§ã«å€æŽãå ããããŠãååž°ãçºçããªãããšã§ãã
ã·ã¥ã¬ãŒããžã·ã§ã³ïŒ
åœåãããç§ãã¡ã¯Sugarãéçºããä»æ§ã«æºæ ããã ãã§ãªããä»æ§ãšãšãã«é²åããããšãç®æããŸããã
ES5ããã±ãŒãžã§ã¯ãSugarã¯çŸåšã®ä»æ§ã§èª¬æãããŠããããªãã£ã«ã¡ãœãããæäŸããŸãã ãã¡ãããå®è¡ç°å¢ã«ã¡ãœããã®ãã€ãã£ãå®è£ ãããå Žåã¯ããã€ãã£ãã¡ãœããã䜿çšãããŸãã Sugarã«ã¯åºç¯ãªãã¹ãã»ãããããããã¹ãŠã®ããªãã£ã«ãä»æ§ã«å®å šã«äžèŽããããšã確èªã§ããŸãã ããã«ãå¿ èŠã«å¿ããŠãES5ããã±ãŒãžãæåŠããä»ã®ES5ããªãã£ã«ã䜿çšã§ããŸãã
ä»æ§ã«æºæ ãããšã¯ãä»æ§ã®å€æŽã«é©å¿ããããšãæå³ããŸãã åžžã«æšæºã®æåç·ã«ããããšã¯ãSugarã®è²¬ä»»ã§ãã æ°ãããã©ããä»æ§ãžã®å¯Ÿå¿ãããã«éå§ããã°ããã»ã©ãå°æ¥ã®ä»æ§ã«åãæ¿ããã®ã¯ç°¡åã«ãªããŸãã ããŒãžã§ã³1.4以éãSugarã¯ECMAScript 6æšæºã«æºæ ããŠããŸãïŒéçºã®ããåæã®æ®µéã§ãã7ãåç §ïŒã ä»æ§ã®å€æŽã«äŒŽããSugarã¯ç«¶åãé¿ããããã«èª¿æŽãç¶ããå®çšæ§ãšãã€ãã£ãå®è£ ãžã®æºæ ã®ãã©ã³ã¹ããšãããåªããŸãã
ãã¡ãããäŸåé¢ä¿ãå®æçã«æŽæ°ããããŠãŒã¶ãŒã«ã¯é©å¿ãé©ããŠããŸãã ããããç°å¢ãä»æ§ã®æ¬¡ã®ããŒãžã§ã³ã«åãæ¿ãããšãå€ãããŒãžã§ã³ã®Sugarã«ãããããžã§ã¯ãã¯ã©ã®ããã«åäœããŸããïŒ ç¶æ³ãæ³åããŠã¿ãŠãã ãããããªãã®ãµã€ããžã®èšªåè ã®ãã©ãŠã¶ãæŽæ°ããããµã€ããããã«äŸµå ¥ããŸãã Sugarã¯æè¿ãä»æ§ã§æ瀺çã«èª¬æãããŠããªãã¡ãœãããåå®çŸ©ãããšããé£ãã決å®ãäžããŸããã
if (!Object.prototype.foo) Object.prototype.foo = function(){};
ãECMAScriptã«ãªãã¡ãœããã¯ãã¹ãŠç¡æ¡ä»¶ã§åå®çŸ©ãããŸãã
éã«æãããããããŸãããããã®æ±ºå®ã¯ãµã€ããµããŒãã®æ¹åãç®çãšããŠããŸãã ä»æ§ãæŽæ°ããçµæããã€ãã£ãã¡ãœãããå€æŽãããSugarãšç«¶åããå Žåã§ããSugarã¯ãããããªãŒããŒã©ã€ãããŸãã ãããã£ãŠãã¡ãœããã¯ä»¥åãšåãããã«æ©èœãç¶ããŸã-ãµã€ãã®æŽæ°ãæã«å ¥ãããŸã§ã ãããããã§ã«è¿°ã¹ãããã«ãç§ãã¡ã¯ãã®å¿ èŠæ§ãæå°éã«æããä»æ§ãããã¯ããã«å ãè¡ãããåªããŠããŸãã
TL / DR
ãã¹ãŠã®åé¡ãšããã«é¢é£ãããªã¹ã¯ãèŠãŠã¿ãŸãããã
- åé¡ïŒ ç°å¢ãªããžã§ã¯ãã®å€æŽ
ãªã¹ã¯ïŒãªãã - åé¡ïŒ åæããããã£ãšããŠã®æ©èœ
ãªã¹ã¯ïŒæå°éã å®å šãªæ¹æ³ã§é åããã©ããŒã¹ããã®ãšåæ§ã«ãéåžžã®ãªããžã§ã¯ãããã©ããŒã¹ãããšãã«ãªã¹ã¯ã¯ãããŸããã å®å šã§ãªãæ¹æ³ã§é åã移åããå ŽåãIE8以äžã§ã¯åé¡ãçºçããŸãã - åé¡ïŒ ããããã£ã®ãªãŒããŒã©ã€ã
ãªã¹ã¯ïŒãªãã - åé¡ïŒ ã°ããŒãã«ããŒã ã¹ããŒã¹ã®ç«¶å
ãªã¹ã¯ïŒæå°éã§ããããããžã§ã¯ãã®ã°ããŒãã«ãªåå空éã§äœãèµ·ãã£ãŠããããèªèãããšéã«æé·ããŸãã çæ³çã«ã¯ããããžã§ã¯ãã«ã¯Sugarã®ãããªè€æ°ã®ã©ã€ãã©ãªãå«ããã¹ãã§ã¯ãªãããã®äœ¿çšãææžåããå¿ èŠããããŸãã èªåã§ã©ã€ãã©ãªãäœæããŠããå Žåã¯ãSugarã䜿çšããªãã§ãã ããã ãã³ãã§ãã§ããã ã倧声ã§ãŠãŒã¶ãŒã«Sugarã¢ããªã±ãŒã·ã§ã³ãå ±åããŠãã ããã - åé¡ïŒ ããããã£ãæ¬ èœããŠãããšããä»®å®
ãªã¹ã¯ïŒæå°éã ãã®åé¡ã¯ãSugarã®æŽå²ã®äžã§2åçºçããäž¡æ¹ã®ã±ãŒã¹ã¯ããã«è§£æ±ºãããŸããã - åé¡ïŒ ã³ã³ãã©ã€ã¢ã³ã¹
ãªã¹ã¯ïŒéåžžã«ãããã Sugarã¯ããã€ãã£ããªããžã§ã¯ãã®ä¿®æ£ã«å¯èœãªéã泚æãæãããšããŸãã ããããããã§ååã§ããïŒ ãã®è³ªåã«å¯Ÿããçãã¯ããŠãŒã¶ãŒã®ä¿¡å¿µãšãããžã§ã¯ãã®æ§é ã«äŸåããæéãšãšãã«å€åããŸãïŒããè¯ãããïŒã
ãããã®çµè«ã¯ãçŸå®ã®äžçã§Sugarã䜿çšããçµéšãšãŠãŒã¶ãŒã®ãã£ãŒãããã¯ã«åºã¥ããŠãç§ãã¡èªèº«ã§æ±ºå®ããŸããã çãããå Žåã¯ãèšäºã®åãã€ã³ãã詳现ã«èª¬æããŸãããããããSugarããããžã§ã¯ãã«é©ããŠãããã©ããã«ã€ããŠç¬èªã®çµè«ãå°ãåºãã®ã«åœ¹ç«ã€ããšãæåŸ ããŠããŸãã
翻蚳è ãã
ããã©ãŒãã³ã¹SugarJS
ãã䜿ãããããSugarã¯Lo-Dashã®ããã©ãŒãã³ã¹ãèãã倱ããŸãã ãã ããããã©ãŒãã³ã¹ã®åé¡ã¯ãç§ã®æèŠã§ã¯ã倧éã®ããŒã¿ã®åŠçã§ã®ã¿åé¡ã«ãªããŸãã ããã³ããšã³ãã䜿çšããå Žåããããã®ã©ã€ãã©ãªã®é床ã«éãã¯èŠãããŸããã
ããã©ãŒãã³ã¹ãéèŠãªäººã«ã¯ã LazyJSããå§ãããŸã ã ãªããžã§ã¯ã/é åã®ããããã£ãèµ°æ»ããåŸããã¹ãŠã®ããããã£ãå«ãæ°ãããªããžã§ã¯ããè¿ãå¿ èŠããªãå ŽåãLazyJSã¯Lo-Dashãããããã©ãŒãã³ã¹ãåªããŠããŸãã è€åæäœã§ã¯ãã®ã£ããã倧ãããªããŸãã ããšãã°ã
map -> filter
æäœã§ã¯ãLazyJSã¯Lo-Dashã®5åãSugarJSã®15åé«éã§ãã ããããã£å€ã調ã¹ãã ãã§ãªããæ°ãããªããžã§ã¯ã/é åãçµã¿ç«ãŠãå¿ èŠãããå ŽåãLazyJSã¯ãã®å©ç¹ã倱ããŸãã StreetStrider 㯠ãé 延ãã§ãŒã³ã³ã³ãã¥ãŒãã£ã³ã°ãLoDashããŒãžã§ã³3ã§èšç»ãããŠããããšã瀺åããŠããŸãã
ãã ïŒè±èªïŒã§ã¯ãããŸããŸãªäžè¬çãªæäœã§10åã®é¡äŒŒã©ã€ãã©ãªã®ããã©ãŒãã³ã¹ããã©ãŠã¶ãŒã§çŽæ¥æ¯èŒã§ããŸãã
倱ã£ãå©äŸ¿æ§
ãã€ãã£ããªããžã§ã¯ãã®æ¡åŒµã®åé¡ãRubyã§ã©ãã»ã©ãšã¬ã¬ã³ãã«è§£æ±ºãããã®ãçåã«æããããããããŸããã ããã¯ãRuby 2.1ã§å®éšçã¹ããŒã¿ã¹ããæãåºããæ¹è¯ã¡ã«ããºã ãææ¡ããŸããã
Vasyaã©ã€ãã©ãªãäœæããéçºè Vasyaãããšãããããäœæããããšã«æ¥ãããããªããšä»®å®ããŸãã圌ã¯ãreineã³ã³ã¹ãã©ã¯ãã䜿çšã
refine
ãã©ã€ãã©ãªããæšæºãªããžã§ã¯ãã®ã¡ãœãããå®çŸ©ããŸãã
refine String do def petrovich "Petrovich says: " + self end end
éçºè ã®Petyaã¯ãå€ãã®ããã°ã©ããŒãåãçµãã§ãã倧èŠæš¡ãããžã§ã¯ãã®äžéšã®1ã€ã圫å»ããŸãã PetyaãVasyaã©ã€ãã©ãªãæ¥ç¶ãããšãVasinsã®ç¬åµçãªãããã¯ãããžã§ã¯ãå šäœã«é©çšããããæ®ãã®ã³ãŒããŒã«å¹²æžããŸããã ã©ã€ãã©ãªãæ¥ç¶ãããšãããã€ãã£ããªããžã§ã¯ãã®åå®çŸ©ã¯ãŸã£ããçºçããŸããã
æ°ããã¡ãœããã䜿çšããããã«ãPetyaã®ã³ãŒãã§ã¯ãã©ã®ãã³ã€ãããããã©ã®ã©ã€ãã©ãªãå¿ èŠãã瀺ããŠããŸãã
using Vasya using HollowbodySixString1957
ãããã®ã©ã€ãã©ãªããäœæãããã°ããŒãã«ãªããžã§ã¯ãã®åå®çŸ©ã®çµæãšããŠããããã¯PetyaãèŠæ±ããã¯ã©ã¹ãã¢ãžã¥ãŒã«ããŸãã¯ãœãŒã¹ã³ãŒããã¡ã€ã«ã«ã®ã¿é©çšãããŸãã
UPD1ïŒãªãããããã¹ãŠå¿ èŠãªã®ã§ããïŒ
ã³ã¡ã³ãããããããç§ã ãã«æããã§ããããšãæããã«ãªããŸããã ã³ã¡ã³ãããçããåºããŸãã
ããã¯ãããããRubyã§çå£ã«ããã°ã©ãã³ã°ãå§ãã人ã«ãšã£ãŠã¯ãã£ãšæããã§ãããã 圌ããèšãããã«ãããªãã¯ããã«è¯ãããšã«æ £ããŸãïŒãªããã§éåžžã«æ©èœçãªæšæºã©ã€ãã©ãªãåçèšèªã§ã¡ãœãããåŒã³åºãã¡ãœããã®èªç¶ãªæ¹æ³ãã¡ãœãããé£éããèœåã
ãã®ã³ãŒãã衚瀺ããããïŒæœè±¡çãªäŸïŒïŒ
var result = Math.floor( MyArray.last( arr ) ); if (debug) console.log( "result:", result ); return result;
...ããã®ä»£ããã«ïŒ
return arr.last().floor().debug();
...ããã¯ã©ãããããããããªããç¥ã£ãŠãããéå±ã«ãªããŸãã