ãŸãšã ïŒ
ããã€ãã®é«æ¬¡é¢æ°ãåãããããã®é¢æ°ã®éšåçãªã¢ããªã±ãŒã·ã§ã³ãè¿œå ãããããã§æãç³ã¿ã調æŽããDOMãæäœããããã®Javascript DSLãååŸããŸãã
人éã®èšè㧠ïŒ
çŽç²ã§æå¿«ãªJavaScriptã«ããé¢æ°åããã°ã©ãã³ã°ã®ç°¡åã§æå¿«ãªçŽ¹ä»ã
Haskell Through Thornsãšã¯ç°ãªã
ããã¹ãŠãåãŸãïŒå€ãããå ŽåããããŸãïŒãæ£ã«çœ®ãããŸãã
èšäºãèªãããšã§ãå®ç掻ã§ã®AFã®é©çšäžå¯èœæ§ã®ç¥è©±ãæããã«ãªããŸãã åãåé¡ã®è§£æ±ºçãããŸããŸãªèŠ³ç¹ããèŠãããšãã§ããŸãã åçã®ããã«ã
æ©èœ
ç°¡åãªé¢æ°å®çŸ©ããå§ããŸãããã
function add(a,b){ console.log(a+b); };
åãã³ãŒããç°ãªãæ¹æ³ã§æžãããšãã§ããŸãã
var add = function(a,b){ console.log(a + b); };
Javascriptã®å€§ããªå©ç¹ã®1ã€ã¯ããã®äžã®é¢æ°ãæ¬æ Œçãªãªããžã§ã¯ãã§ããããšã§ãã çã®ãã¡ãŒã¹ãã¯ã©ã¹åžæ°ã
ããšãã°ãJavaãšã¯ç°ãªããé¢æ°ã¯ãªããžã§ã¯ããšã¯å¥ã«ååšã§ããŸããã
äžèšã®é¢æ°ã¯å¯äœçšã䌎ããŸããã€ãŸããå€çã®ç¶æ
ãå€æŽããŸãã ããã¯ã
console.logïŒïŒã䜿çšããŠè¡šçŸãããŸãã
次ã«ãçŽé¢æ°ã®äŸãèããŠã¿ãŸãããã
var add = function(a,b){ return a + b; };
çŽç²ãªé¢æ°ã¯å¯äœçšãåŒãèµ·ãããŸããã ããã€ãã®ããŒã¿ããããã«è»¢éãããšãããŒã¿ãè¿ãããŸãã åæã¯éåžžã«ç°¡åã§ãã ãã¹ããç°¡åã§ãã å€éšäŸåé¢ä¿ã確èªããå¿
èŠã¯ãããŸããã ãããã£ãŠãã»ãšãã©ã®å Žåãå¯äœçšã®ããé¢æ°ãããçŽç²ãªé¢æ°ã®æ¹ãé©ããŠããŸãã
ããããäžæ¹ã§ãçŽç²ãªé¢æ°ã®ã¿ã§æ§æãããããã°ã©ã ã¯å®çšçãªæå³ãæã¡ãŸããã 圌女ã¯äœãèªãã ãåºåãããããŸããã
ãããã£ãŠãçŽç²ãªæ©èœãå¯äœçšã®ããæ©èœããåé¢ããããã«ããã°ã©ã ãèšè¿°ããç掻ãç°¡çŽ åããããšã¯è«ççã§ãã
ãããã£ãŠãé¢æ°åããã°ã©ãã³ã°ã®æåã®ã«ãŒã«-
ç§ãã¡ã¯ãã¡ã€ãã¯ã©ãã«ã€ããŠã¯èªããŸãã-çŽç²ãªé¢æ°
ã䜿çšããŠããŸãã
é«éé¢æ°
ããã«é²ãã§ããŸãã é¢æ°ã¯ãªããžã§ã¯ããªã®ã§ãä»ã®é¢æ°ã«æž¡ãããšãã§ããŸãã ãŸããé«éé¢æ°ãšã¯ãé¢æ°ãè¿ãé¢æ°ããŸãã¯é¢æ°ããã©ã¡ãŒã¿ãŒãšããŠåãåãé¢æ°ã§ãã
以äžã¯ãé¢æ°ãè¿ãé¢æ°ã®ç°¡åãªäŸã§ãã
function makeAdder(base){ return function(num){ return base + num; } }
ãããŠããã®äœ¿çšäŸã
var add2 = makeAdder(2); add2(3);
ã·ã³ãã«ã§æçœã
ãããŠãããã¯é«æ¬¡é¢æ°ã®ããªãããç¥ãããäŸã§ã
var el = document.getElementById("btn"); el.addEventListener("click", function (event){ });
ãã©ã¡ãŒã¿ãšããŠã®
addEventListenerã¯é¢æ°ãåãåããŸãã ã€ãŸãã
addEventListenerã¯é«éé¢æ°ã§ãã
ãããŠãã€ãã³ããçºçãããšãã³ãã©ãŒé¢æ°ãåŒã³åºãããŸãã
ããããããã1ã€ã®ãªãã·ã§ã³ããã身è¿ãªãã®ã§ãã
$("input[type=submit]").on("clink", function(event){
ãŸãã¯ãjQueryã䜿çšããŠãã³ãã©ãŒãèšè¿°ããããšãã§ããŸãã
ã ããããäžåºŠå®çŸ©ïŒ
FVPã¯ãé¢æ°ãè¿ããããã©ã¡ãŒã¿ãŒãšããŠé¢æ°ãåãå
¥ããé¢æ°ã§ãã
ãµã€ã¯ã«
å€ãç¥äººã
ãµã€ã¯ã«ãšã¯ãæšæºã®æ£é¢ãœãªã¥ãŒã·ã§ã³ãæå³ããŸãã ãã®ãããªãã®
for(var i =0; i<n; ++1){
ãŸãã¯ãã®ãããª
while(n--){
ãªãã«ãŒãã䜿çšããã®ã§ããïŒ ããã€ãã®æšæºçãªãŠãŒã¹ã±ãŒã¹ãèŠãŠãã«ãŒããåžžã«æè¯ã®è§£æ±ºçã§ã¯ãªãããšãèŠãŠã¿ãŸãããã
æåã®ãªãã·ã§ã³ã¯ãé
åãšãªã¹ããèµ°æ»ããããšã§ã
for(var i =0; l< arr.length; i<l; ++i){ console.log(arr[i]); }
éåžžããã®ãã€ãã¹ã¯å¯äœçšãšçµã¿åãããŠäœ¿çšââãããŸãã éåžžããããã®å¹æã¯åçŽãªã³ã³ãœãŒã«åºåãããå°ã䟿å©ã§ãã
2çªç®ã®ãªãã·ã§ã³-ãªã¹ãããããŒã¿ãååŸãã
var names = []; for (var i =0; l= tweeps.length; i< l; ++i) { names.push(tweeps[i].name); }
ãã®å ŽåãtwitterãŠãŒã¶ãŒã®ãªã¹ãã
ã«ãŒãã䜿çšããŠããŠãŒã¶ãŒåã®ãªã¹ããååŸããŸã
å¥ã®äœ¿çšäŸã¯ããªã¹ãå
ã®ããŒã¿éçŽã§ãã
var html = ""; for(var i =0; l = items.length, i<l, i++){ html += '<li>' + items[i] + '</li>'; } this.list.innerHTML = html;
ã€ãŸãããªã¹ãããŒã¿ãéèšããåºåã§ç°ãªãããŒã¿æ§é ãååŸããŸãã
foreach
ã«ãŒããåžžã«æè¯ã®ãœãªã¥ãŒã·ã§ã³ã§ãããšã¯éããªããšèšããŸãããã代æ¿æ段ã¯äœã§ããïŒ
åæ§ã®ãµã€ã¯ã«ã眮ãæããããšãã§ãããã®ã¯äœã§ããïŒ
for (var i =1; l = arr.length; i< l; ++i){ console.log(arr[i]); }
ããšãã°ã
foreach ã
Array.prototype.forEach arr.forEach(function(item){ console.log(item); });
æã§ãªã¹ããå®è¡ãã代ããã«ã
é
åã¡ãœããã åèŠçŽ ãåŠçããé¢æ°ãæž¡ããå¿
èŠãªçµæãååŸããŸãã
ããããããã®
æ ¹æ¬çãªéãã¯äœã§ããïŒ
for (var i =1; l = arr.length; i< l; ++i){ console.log(arr[i]); }
ãããŠãã
arr.forEach(function(item){ console.log(item); });
ïŒ
æ®å¿µãªãããJSã§é¢æ°ãèšè¿°ããããã®æ§æã¯ååã«åé·ãªã®ã§ãæžãããããã¹ãã®éã倧å¹
ã«ç¯çŽããããšã¯ã§ããŸããã§ããã
ããããäœãä»ã®ãã®ããããŸãã ã³ãŒããèŠããšãåå®è£
ã§ã©ã®ãããªæ³šæãæãããŠããããããããŸãã
æåã®ã»ã¯ã·ã§ã³ã§ã¯ããµã€ã¯ã«èªäœã®ã¡ã«ããºã ã«çŠç¹ãåœãŠãŸãã æ°å€ãååŸãã1ãã€å¢ãããã€ã³ããã¯ã¹ã§é
åèŠçŽ ãååŸããã¢ã¯ã·ã§ã³ãå®è¡ããŸãã
2çªç®ã®äŸã¯ç解ããããã§ãã ãªã¹ãã®åèŠçŽ ã§äœããããŸãã
2çªç®ã®äŸã§ã¯ãæœè±¡åã®ã¬ãã«ãã¯ããã«é«ããªã£ãŠããŸãã ãããŠãå察åŽããåé¡ã®è§£æ±ºã«ã¢ãããŒãããããšãã§ããŸãã
ãããã£ãŠãã«ãŒãã䜿çšã§ãããã®ã«ã€ããŠã¯ïŒ
- å¯äœçš
- å€æ
- ãã£ã«ã¿ãŒ
- èŠçŽ ã®çµã¿åãã
- å¥ã®éžæè¢
å°å³
JavaScriptã«ããå¥ã®é¢æ°ãèŠãŠã¿ãŸãããã
var names = []; for( var i =0, l= tweeps.length, i< l; ++i){ names.push(tweeps[i].name); }
ããã¯ããªã¹ãå€æã«å¯Ÿå¿ããæœè±¡åã§ãã
ãããã䜿çš
ãããšããã®åé¡ãã¯ããã«ç°¡åã«è§£æ±ºã§ããŸãã
ãµã€ã¯ã«ã®èª¬æããäžæå€æ°ãåãé€ããŸããã çŽæ¥ãã€æ確ãªã³ãŒãã ãŸããåŠçæ©èœã¯ååã«çãããããã¹ãŠã1è¡ã«åããããšãã§ããŸãã
var names = tweeps.map(function(t){return t.name;});
ç§ã¯1è¡ã§ã³ãŒããæžãã®ã奜ãã§ã¯ãããŸããã ãããã1è¡ã§ããã€ã®ã¢ã€ãã¢ãè¡šçŸã§ãããã¯ãAPIã®è¡šçŸåã«ã€ããŠèªã£ãŠããŸãã
Twitterã§ã¡ã³ã·ã§ã³ãæ¢ããŠãã ããã
var str = "mentioned by"; for(var i =0; l= tweeps.length; i < l; ++i){ str += tweeps[i].name; if(i< tweeps.length-1) {str += ", "} }
ããªãäžåšçšãªäŸã ã€ã³ããã¯ã¹ã®äœæãšé
åèŠçŽ ã®ååŸã§ãšã©ãŒãçºçããå ŽåããããŸãã
ãã®äŸã§å®éã«è¡ãããšãåæããŸãããã
- ãŠãŒã¶ãŒåãåŒãåºã
- ãŠãŒã¶ãŒåãçµåããŸãïŒãã®å Žåããªã¹ãã®æåŸã«ã³ã³ãã¯ãããŸããïŒ
- åºåãæåãšããŠã³ã³ãã䜿çšããŸã
ããããš
çµåã䜿çšããæžãæã
var str = "mentioned by " + tweeps.map(function(t){ return t.name; }).join(", ");
ãã¹ãããæ©äŒã¯ãã£ãšå°ãªããªããŸããã
ããããããã¯ãã£ãšè¯ãã§ããŸããïŒ :)
ãªããžã§ã¯ãã®ããããã£ã«ã¢ã¯ã»ã¹ããããã«äœ¿çšããå¥ã®é«æ¬¡é¢æ°ã玹ä»ããŸãããã
圌女ã®
å°éå
·ãšåŒãŒã
function prop(name){ return function (object){ return object[name]; } }
äžèŠããŸã£ããæå³ããããŸããã ååãããã«æž¡ããŸã
ãããŠãå¿
èŠãªãã£ãŒã«ããåŒãåºããªããžã§ã¯ãã転éãããé¢æ°ãè¿ããŸãã
ããçš®ã®çŽãããã説æãåºãŸããã å®éã®ã¿ã¹ã¯ã§ãã®é¢æ°ã䜿çšããŠã¿ãŸãããã
var str = "Mentioned by " + tweeps.map(prop ("name")).join(", ");
ããã§ãå¥ã®ã¯ã³ã©ã€ããŒã ããªãè¯ãè¡šçŸåã ãããŠã
propé¢æ°ã¯ããã»ã©åœ¹ã«ç«ããªãããã§ã¯ãããŸããã
æžãã
ããã¯ãforãforeachãwhileãªã©ã®é¡äŒŒã®æ§é ã®structuresç¥æ¯ã§ãã ãã®é¢æ°ã¯
foldãšãåŒã°ããŸãã
ããªããã£ããªäŸããããäžåºŠå§ããŸãããã
var totalLength = 0; for(var i=0; i< buffers.length; i++){ total.Length += buffers[i].length; }
ãããã¡ã®é·ããåèšããã ãã§ãã
ã©ã®ã¹ãããã«åŸãã¹ãã§ããïŒ
- ãããã¡é·ãååŸãã
- åèšã®é·ã
Lukeé¢æ°ã䜿çšããŸãã
ãŸãã
mapã䜿çšããŠãããã¡ãŒé·ãå«ããªã¹ããååŸããŸã
var totalLength = buffers. map(function (buffer) {return buffer.length; })
2çªç®ã®ã¹ãããã§ã¯ã
reduceãé©çšããŠåèšãååŸããŸãã
var totalLength = buffers. map(function (buffer) {return buffer.length; }). reduce(function(sum, curr){return sum+curr;}, 0);
reduceã«æ
£ããŠããªãå Žåã¯ãéåžžã«ç°¡åã«æ©èœããŸãã ããããªãŒæ©èœãããã«éä¿¡ãããåèŠçŽ ãšããããªãŒæ©èœã®åæå€ã«é©çšãããŸãã
ç¹°ãè¿ããŸãããè€éãããŸãã
reduceãåçŽãªãªã¹ãã«é©çš
ãããšã©ããªãããèŠãŠã¿ãŸãããã
[10, 5, 15, 10, 10].reduce(function(sum, curr){return sum+curr;}, 0);
ãããã£ãŠãreduceã䜿çšãããšããªã¹ãã¢ã€ãã ãç°¡åã«è¿œå ã§ããŸãã
ãããããã§ã«äŒŒããããªãã®ããããŸããã æ¯èŒããŠãã ããã
function (prev, curr){return prev + curr;}
ãããŠ
function add(a,b){ return a+b; }
ãããã£ãŠããããã¡ãŒã®åèšé·ãèšç®ããããã«é¢æ°ãåçŽåã§ããŸãã
var totalLength = buffers. map(function (buffer) {return buffer.length; }). reduce(add, 0);
ä»ããæ確ã§ããïŒ
reduceã¯ã
addé¢æ°ã䜿çšããŠãªã¹ãã®ãã¹ãŠã®èŠçŽ ãåçŽã«åèšããŸãã åèšã®åæå€ã¯ãŒãã§ãã äœããã£ãšç°¡åã ãããïŒ
ããããåçŽåã¯ããã§çµããã§ã¯ãããŸããã æ¯èŒãã
function (buffer) {return buffer.length; }
ãããŠ
prop("length")
ãã³ããåã£ãŠ......
var totalLength = buffers. map(prop("length")). reduce(add, 0);
ãšã¬ã¬ã³ããªã·ã§ãŒãã
ãã¡ãããããã1è¡ã§æžãããšãã§ããŸã
var totalLength = buffers.map(prop("length")).reduce(add, 0);
ã«ãŒãã®ä»£ããã«ç³ã¿èŸŒã¿ïŒçž®å°ïŒã䜿çšãããšãç°ãªãæœè±¡åã¬ãã«ã§èããããšãã§ããŸãã åèŠçŽ ã®ã¬ãã«ã§ã¯ãªãããªã¹ãã«å¯ŸããŠæäœãå®è¡ããŸãã
éåæåŒã³åºã
ãã ãããªã¹ããèŠçŽ
ããããã«ãªãã¥ãŒã¹å¥åãã©ãŒã«ãã䜿çš
ããããšã¯ãéåžžã«åçŽåãããäŸã§ãã ãã®ã¢ã€ãã¢ã¯ã¯ããã«åŒ·åã§ãã å¥ã®äŸãèŠãŠã¿ãŸãããã
ãã©ãŠã¶ã§Javascriptã䜿çšããéã®åé¡ã®1ã€ã¯ããã¹ãŠãåãã¹ã¬ããã§å®è¡ããããããã³ãŒã«ããã¯ã䜿çšããå¿
èŠãããããšã§ãã
ãã£ã¬ã³ãžã
- ããã€ãã®ã¹ã¯ãªãããããŠã³ããŒããã
- ããããæ¥çããŸã
- æ¥çæã«ã¹ã¯ãªããã®é åºãç¶æãã
ã€ãŸãã次ã®ãããªé¢æ°ãäœæããå¿
èŠããããŸãã
combine(["/jquery.js", "/underscore.js", "/backbone.js"], function(content){
çµåé¢æ°ã®å®è£
ãæžããŸãããã æå-æ£é¢ã¢ãããŒãã
function combine(scripts, callback){ var data []; for(var i =0; l = scripts.length; i< l; ++i){
ã¹ã¯ãªããã®å ŽåãjQuery.ajaxã䜿çšããããšã¯è«ççã§ãã
function combine(scripts, callback){ var data []; for(var i =0; l = scripts.length; i< l; ++i){ jQuery.ajax({ url: scripts[i], success : function(response){
ãã®ãããªã³ãŒãã¯ããµãŒããŒãžã®ãªã¯ãšã¹ããéåæã«éä¿¡ãããããããã©ãŠã¶ãŒã®é床ãäœäžãããããšã¯ãããŸããã ã€ãŸããå®è¡ãããšã3ã€ã®äžŠåã¯ãšãªãå®è¡ãããŸãã
ã¹ã¯ãªãããæ£åžžã«ããŠã³ããŒãããããã®ãã³ãã©ãäœæããŸãã
function combine(scripts, callback){ var data []; for(var i =0; l = scripts.length; i< l; ++i){ jQuery.ajax({ url: scripts[i], success : function(response){ data[i] = response; if(data.length === scripts.length){ callback(data.join("")); } } }); } }
æ©èœã®æºåãã§ããŠããããã§ãã ãããã2ã€ãããŸãã
第äžã«ãugãããããŠç¬¬äºã«-ããã¯åäœããŸããã
ããã§äœãåé¡ã«ãªããŸããïŒ JavaScriptã¹ã³ãŒãã䜿çšã ãã®èšèªã§ã¯ãã¹ã³ãŒãã¯ãããã¯ããŒã¹ã§ã¯ãªãæ©èœçã§ãã ã€ãŸãã3ã€ã®é¢æ°ãã¹ãŠã§å€æ°iã®åãå€ã衚瀺ãããŸãã ãµãŒããŒããã®å¿çãæ¥ãåã«ãµã€ã¯ã«ãæ©èœããããã3ã€ã®æ©èœã¯ãã¹ãŠi == 3ã§æ©èœããŸãã
ãã®åé¡ã¯æšæºçãªæ¹æ³ã§è§£æ±ºãããŸã-ã«ãŒãå€æ°ã®å€ããã£ãã·ã¥ããŸãã ãããããã®ã³ãŒããããçŸãããªã£ããšã¯èšããŸããã
function combine(scripts, callback){ var data []; for(var i =0; l = scripts.length; i< l; ++i){ (function (i){ jQuery.ajax({ url: scripts[i], success : function(response){ data[i] = response; if(data.length === scripts.length){ callback(data.join("")); } } }); }(i)); } }
ã»ãšãã©åäœããŸãã ã¯ããŒãžã£ãŒãšããªãããŒãªå€æ°ãåãé€ãããã«ãforeachã䜿çšã§ããŸã
function combine(scripts, callback){ var data []; scripts.forEach(function(script,i){ jQuery.ajax({ url: scripts[i], success : function(response){ data[i] = response; if(data.length === scripts.length){ callback(data.join("")); } } }); }); } }
ãã¡ããè¯ãã®ã§ãããããã§ãæãã§ãã ãšããã§ãã³ãŒãã¯ãŸã æ£ããåäœããŸããã ããã¯å¥å
šãªç¶æ
ã«è¿œå ã§ããŸãããããã«ããéçºãšãã®åŸã®ãµããŒãã«ããã«å°é£ãçããŸãã
ç¶ç¶åæ Œã¹ã¿ã€ã«
é çãåãé€ãããã«ãã©ã€ãã©ãªã䜿çšããŸã
github.com/caolan/asyncä»äºã§ã¯ãCPSãªã©ã䜿çšããŸãã
ããã¯å®éããããã£ãšæªãèãããŸãã ããã¯ãå¥ã®é¢æ°ããã©ã¡ãŒã¿ãŒãšããŠåãåãé¢æ°ã§ãããæåã®é¢æ°ãçµäºãããšãretrunã®ä»£ããã«ãã©ã¡ãŒã¿ãŒé¢æ°ãåŒã³åºããŸãã
ç®çã®çµæãåŸãããããã«jQuery.ajaxãã©ããããŸãã
function ajax(url, callback){ jQuery.ajax({url: url, success: callback}); }
ãã®é¢æ°ã¯ãã©ã¡ãŒã¿ãŒãšããŠã³ãŒã«ããã¯ãåãåããŸããããšã©ãŒãã³ãã©ãŒã«ã€ããŠã¯èª¬æããŸããã§ããã å®éã®ã³ãŒãã§ããå¿
èŠããããŸããã衚瀺ãç°¡åã«ããããã«ãå¿ããŠããŸããŸãã
éåæã©ã€ãã©ãªã䜿çšãããšã©ããªããŸããïŒ æ¬¡ã®ããã«ãªããŸãã
function combine(scripts, callback){ async.map(scripts, ajax, function(contents){ callback(contents.join("")); }); }
éåæã®äžçã§æ©èœããæ¢è£œã®ãããé¢æ°ããããŸãã ãšããã§ãçŸåšã®å®è£
ã§ã¯ãåã®äŸãšã¯ç°ãªããã¹ã¯ãªãããæ¥çããããã®æ£ããé åºãæäŸãããŸãã
äœãšæ¯èŒããŠãã ããïŒ
function combine(scripts, callback){ var data []; for(var i =0; l = scripts.length; i< l; ++i){ (function (i){ jQuery.ajax({ url: scripts[i], success : function(response){ data[i] = response; if(data.length === scripts.length){ callback(data.join("")); } } }); }(i)); } }
mapã¯ãã§ã«ããã°ã©ã ãæžãããã®èªç¶ãªæ¹æ³ãªã®ã§ãäžèšã®ã³ãŒããæžãããšã¯æ±ºããŠãããŸããã éåæç°å¢ã«ããããé©å¿ãããæ¹æ³ãèããŸãã éåæã©ã€ãã©ãªããªããã°ãéåæããããèªåã§äœæããŸãã
æ©èœçãªã¢ãããŒãã«ãããç©äºãèŠãã®ããã£ãšç°¡åã«ãªããŸãã ããçŸãããœãªã¥ãŒã·ã§ã³ãå®è£
ããŸãã
é¢æ°ã®éšåçãªäœ¿çš
é¢æ°åããã°ã©ãã³ã°ããçãŸããå¥ã®ã¢ã€ãã¢ã§ãããæ£ãã調çã§ããã°éåžžã«äŸ¿å©ã§ãã
äŸãšããŠãDOMèŠçŽ ãäœæããŸãã
ïŒç¿»èš³è
ã®æ³šæïŒcull.domã¯ããããžã§ã¯ãã®1ã€ã®ããã«äœæããèè
ã®ã©ã€ãã©ãªã§ãããã ãããã®äžã®æ©èœã¯æçœã§ã·ã³ãã«ã§ããïŒ
var ul = cull.dom.el("ul");
ããããã£å±æ§ãèšå®ããããšãã§ããŸãã
var ul = cull.dom.el("ul", {className: "bands"});
ãããŠåäŸã瀺ã
var li = cull.dom.el("li", "Tom Waits"); var ul = cull.dom.el("ul", {className: "bands"}, li);
çžäºã«å
éšã§äœ¿çšãããšãHTMLåãã®äœããã®DSLãååŸã§ããŸãã
va ul = cull.dom.el("ul", className:"bands"}, cull.dom.el("li", "Tom Waits"));
ããã§ã¯ãé¢æ°ã®éšåçãªäœ¿çšã«ã€ããŠèª¬æããŸãããã æåã®äŸã®1ã€ãèŠããŠããŸããïŒ
function makeAdder(base){ return function(num){ return base + num; } }
2ã€ã®æ°å€ãåèšããé¢æ°ãè¿ããŸãã ãã¡ãããå¿
èŠã«å¿ããŠãååä»ãé¢æ°ã䜿çšã§ããŸãã
function makeAdder(base){ return function(num){ return add(base, num); } }
ãããŠä»ã
makeAdderé¢æ°ã
addé¢æ°ãåãããã®åŒæ°ã®1ã€ããã£ããã£
ããããšã
ããããŸãã åŒæ°ã®1ã€ãå®æ°ã§ããå ç®é¢æ°ãååŸããŸã
var add2 = cull.partial(add, 2); add2(5);
èå³æ·±ãæ©äŒããããŸãã-DSLãäœæããŠDOMèŠçŽ ãããã«çŸããããããšã§ãã
var ul = cull.partial(cull.dom.el, "ul"); var li = cull.partial(cull.dom.el, "li");
ãããŠããã®ãããªHTMLãªã¹ããäœæã§ããŸã
var list = ul({className: "bands"}, [li("Diamanda Galas"), li(" "), li("John Zorn")]);
ç§ã®ããã«ãæååå€æ°ã®ã¬ãã«ã§ã®ããã°ã©ãã³ã°ãå«ããªããããã¯ããªãã®äººçãç°¡çŽ åããçŽ æŽãããæ¹æ³ã§ãã ããã§ãã³ãŒãè£å®ãªã©ã®äŸ¿å©ãªæ©èœãè¿œå ãããŸããã ãŸããã³ãŒãã¯éåžžã®HTMLã«éåžžã«äŒŒãŠããŸãã
ãããŠãç§ãã¡ã®ã¢ãããŒãã¯éåžžã«çŸãããããäºåã«ããã¥ã¡ã³ãã®ãã¹ãŠã®èŠçŽ ã«å¯ŸããŠé¢æ°ãäœæã§ããŸãã
["a", "br", "code", "div", ...].forEach(function(tagName){ cull.dom.el[tagName] = cull.partial(cull.dom.el, tagName); });
ãããã£ãŠãåHTMLèŠçŽ ã«å¯ŸããŠé¢æ°ãäœæããŸãã
ãã¡ãããåå空éã¯å¿
ãããå®å
šã«äœ¿çšã§ãããšã¯éããªããããããã«ç°¡ç¥åããŸãã
var e = cull.dom.el; var list = ul({className: "bands"}, [e.li("Pan Sonic"), e.li(" "), e.li("Muslimgauze")]);
çŸåšãã°ããŒãã«å€æ°ãšé¢æ°ã«çžãããŠããŸãããããã¯è¯ãããšã§ãã
æ©èœæ§æ
ç°¡åãªã¢ããªã±ãŒã·ã§ã³ã®å¥ã®äŸ-ã¢ã³ã±ãŒãã§ãã

åãããã¯ã«çããå¿
èŠããããŸãã åãããã¯ã«ã¯ããã€ãã®è³ªåãå«ãŸããŠããŸãã 1ã€ã®ãããã¯ã«çããåŸã次ã®ãããã¯ã«é²ã¿ãŸãã
åãããã¯ã¯ã質åã¢ãŒããçµæã¢ãŒãããŸãã¯éã¢ã¯ãã£ãã®ããã«ãšããŠè¡šãããšãã§ããŸãã

åããã«ã«ã¯ç°ãªããã£ãŒã«ãããããŸãã æååãæ°å€ãæ¥ä»ã
ãã£ãŒã«ãã«ã¯ãç·šéã¢ãŒããŸãã¯çµæã¢ãŒãã®2ã€ã®ã¢ãŒãããããŸãã
æ©èœçãªã¢ãããŒãã䜿çšããŠãã®åé¡ã«ã©ã®ããã«ã¢ãããŒãã§ããããèŠãŠã¿ãŸãããã
ãæ°ã«å
¥ãã®
ããããæ©èœãèŠããŠ
ããŸããïŒ
tweeps.map(prop("name"));
圌女ã«ã¯ååã®å
åŒæ©èœããã
ãŸã ã
tweeps.map(func("to.String"));
ãªããžã§ã¯ãã«é©çšã§ããé¢æ°ãè¿ããŸãã
ã¢ã³ã±ãŒãã®åãããã¯ã®çµæãèšç®ããŸããã
buildSummary: function(){ return div(this.components.map(func("buildSummary"))); }
ååã¯æçœã§ããã¹ãã§ãã ã¢ã³ã±ãŒãã®åãããã¯ã«å¯ŸããŠ
buildSummaryé¢æ°ã«ãã£ãŠäœæãããèŠçŽ ãããdivãè¿ããŸãã
ãã®äŸã§ã¯ãåã³ã³ããŒãã³ãèªäœããã®çµæã衚瀺ããæ¹æ³ãç¥ã£ãŠããŸãã ãã ããããã«ã¯çµæãç¹å®ã®æ¹æ³ã§è¡šç€ºããå¿
èŠãããå ŽåããããŸãã
ãããã£ãŠã
buildSummaryãš
getSummaryã® 2ã€ã®é¢æ°ãäœæã§ããŸãã
1ã€ã¯ãhtmlã¿ã°ãå«ãå®å
šãªãã¬ãŒã³ããŒã·ã§ã³ãäœæããããšã§ãã
2çªç®-å¿
èŠãªçµæãå«ããªããžã§ã¯ããè¿ããŸãã
ãããŠãçµæã®å·§åŠãªåŠçãå¿
èŠã«ãªããšããã«ããã¹ãŠã®çŸããã厩ãå§ããŸããã
buildSummary: function(){ var div = document.createElement("div"); for(var i =0; l=this.components.length; i<l; ++i) { p = document.CreateElement("p"); p.innerHTML = this.components[i].getSummary().text; div.appendChild(p); } return div; }
ãã ãããã®ã³ãŒããæ¹åããã®ã«ååãªæ©èœæåãæ¢ã«åããŠããŸãã æåã®æãããªæ¹åç¹ã¯ãforeachãé©çšããããšã§ãã
buildSummary : function(){ var div = document.createElement("div"); this.components.forEach(function(component){ var p = document.createElement("p"); p.innerHTML = component.getSummary().text; div.appendChild(p); }); return div; }
ã«ãŒãå€æ°ãåãé€ããŸãããã
mapã䜿çšããããšã¯å¯èœã§ããïŒ
buildSummary : function(){ return div(this.components.map(function(component){ var p = document.createElement("p"); p.innerHTML = component.getSummary().text; return p; })); }
çããçæ³ããã¯ã»ã©é ãã ãã®åŒã®äž»ãªåé¡ïŒ
component.getSummary().text;
åé¡ã¯ã1ã€ã§ã¯ãªãã3ã€ã®ããšãèµ·ãã£ãŠããããšã§ãã
- getSummaryïŒïŒã«ããçµæã®ååŸ
- ããã¹ãããããã£ã®ååŸ
- çµæãpã¿ã°ã§ã©ãããã
ããã€ãã®ãããé¢æ°ã¯ã©ãã§ããïŒ
buildSummary: function() { return div(this.components. map(function(component){ return component.getSummary(); }).map(function(summary){ return summary.text; }).map(function(text){ var p = document.createElement("p"); p.innerHTML = text; return p; })); }
æ©èœçãªã¹ã¿ã€ã«ã¯ãããŸãããæãããèŠããŸãã èªæžã¯éåžžã«äžäŸ¿ã§ãã
ããããããäžåºŠã³ãŒããèŠãŠã¿ãŸãããã ããã«ã¯äœããããŸããïŒ
return component.getSummary();
ããã§ã¯ããªããžã§ã¯ãã¡ãœãããåŒã³åºããŸãã ãããããã®ããã®ç¹å¥ãªé¢æ°
funcãäœæããŸããã
buildSummary: function() { return div(this.components. map(func("getSummary")). map(function(summary){ return summary.text; }).map(function(text){ var p = document.createElement("p"); p.innerHTML = text; return p; })); }
ãããŠããã«ïŒ
function(summary){ return summary.text; }
ãªããžã§ã¯ãã®ããããã£ã«ã¢ã¯ã»ã¹ã§ããŸãã ãã®ããã«ã䟿å©ãªæ©èœããããŸãã
buildSummary: function() { return div(this.components. map(func("getSummary")). map(prop("text")). map(function(text){ var p = document.createElement("p"); p.innerHTML = text; return p; })); }
æåŸã®ã»ã¯ã·ã§ã³ãæ®ã£ãã
function(text){ var p = document.createElement("p"); p.innerHTML = text; return p; }
ããã§ãDOMèŠçŽ ãäœæãããã®å
éšããããã£ãèšå®ããŸãã DSLã«ã䌌ããããªãã®ããããŸãããïŒ
buildSummary: function() { return div(this.components. map(func("getSummary")). map(prop("text")). map(p)); }
ä»ã§ã¯ã»ãšãã©çŸããã§ãã ãã ãã泚æç¹ã1ã€ãããŸãã ãªã¹ãã§3ã€ã®ãã¹ãè¡ããŸãã å Žåã«ãã£ãŠã¯ãããã¯æ£åžžãããããŸããããå
šäœçã«ããã¶ãæé©ã§ã¯ãããŸããã äœãã§ããŸããïŒ
æ©èœã®æ§æã䜿çšããŸãã 1ã€ã®é¢æ°ã«3ã€ã®é¢æ°ãå®è¡ããããã®ã§ãã
var summarize = compose( [p, prop("text"), func("getSummary")]);
äœæãã©ã®ããã«å®è£
ããŸããïŒ
éšåçã«ã ãŸããå€ãã®ã³ãŒããèšè¿°ããªãããã«å矩èªãäœæããŸãããã
var callGetSummary = func("getSummary"); var getText = prop("text"); var summarize = compose([p, getText, callGetSummary]);
ãã¹ãŠãã·ã³ãã«ã§æçœã§ãã ããã«é²ãã§ããŸãã
ãµããªé¢æ°ãåŒã³åºããšã©ããªããèŠãŠã¿ãŸãããã
æåã®ã¹ããã
var callGetSummary = func("getSummary"); var getText = prop("text"); var summarize = compose([p, getText, callGetSummary]);
ãªããžã§ã¯ãã¯ãªã¹ãã®æåŸã®é¢æ°ãã€ãŸã
getSummaryã«è»¢éãããŸãã ã¿ã€ã
summaryã®ãªããžã§ã¯ããè¿ããŸãã ãããŠããã®ãªããžã§ã¯ãã¯æ¬¡ã®é¢æ°
getTextã«æž¡ãããŸã
第äºæ®µé
var callGetSummary = func("getSummary"); var getText = prop("text"); var summarize = compose([p, getText, callGetSummary]);
2çªç®ã®ã¹ãããã®çµæãšããŠã
textããããã£ã«å«ãŸããæååãååŸããŸãã ãã®åŸãè¡ã¯pOM DOMãªããžã§ã¯ããäœæããé¢æ°ã«åé¡ãããŸãã
第äžæ®µé
var callGetSummary = func("getSummary"); var getText = prop("text"); var summarize = compose([p, getText, callGetSummary]);
ããã¯ããã©ã¡ãŒã¿ãŒãé¢æ°ããé¢æ°ã«é çªã«æž¡ãããå Žåã®åçŽãªæ§æã®äŸã§ãããã©ã¡ãŒã¿ãŒãåé¢æ°ã«æž¡ããããšãã«æ§æãäœæã§ããåºåã¯çµæã®ãªã¹ãã«ãªããŸãããŸãã¯äœãä»ã®ãã®ã
ããã§ã¯ãèŸæ±åŒ·ãäŸã«æ»ããŸãããã builSummary: function() { var summarize = compose( [p, prop("text"), func("getSummary")]); return div(this.components.map(summarize)); }
æåã«ãçµæãèšç®ããããã®é¢æ°ãäœæããŸããããããŠãããããé©çšããŸãããåæã«ãsummaryé¢æ°ã¯ã©ã®ãªããžã§ã¯ãã§åäœãããã絶察ã«ç¥ããªãããšã«æ³šæããŠãã ããããããã¯ãcomposeé¢æ°ãä»ããŠã®ã¿æ¥ç¶ãã3ã€ã®ç°ãªãæœè±¡åã§ãããããã£ãŠãéèšãå¥ã®ãšã³ãã£ãã£ã«äœæã§ããŸãã var summarize = compose( [p, prop("text"), func("getSummary")]);
ãã£ããããŠãããã«èŠããŸãããããã©ãŒãã³ã¹ã¯ã©ãã§ããïŒããã©ãŒãã³ã¹ã®åé¡
for â 5M
forEach â 1,5M
reduce â 1.5M
DOM â 50K
, DOM. , , â . .
ãããã«
(map, reduce).
.
.
PS
cjohansen.no/talks/2012/javazonePPS ?