
ãåç¥ã®ããã«ã CoffeeScriptã¯JavaScriptãšã¯å°ãç°ãªãå¶åŸ¡æ§é ã®ã»ãããæäŸããŸã ã
èšèªéçºè
ãææ³ãå¯èœãªéãç°¡çŽ åãããã¹ãŠã®æ瀺ã®è©³çŽ°ãªèª¬æãè¡ã£ããšããäºå®ã«ãããããããå€ããå°ãªããéæšæºã®ãµã€ã¯ã«ãäœãããšã¯å€§ããªææŠã®ãŸãŸã§ãã
ãã®èšäºã§ã¯ã CoffeeScriptã§ã«ãŒããæäœããåçãšå¯æ¥ã«é¢é£ããå¶åŸ¡æ§é ã«ã€ããŠå¯èœãªéã詳现ã«èª¬æããããšããŸãã
ãã¹ãŠã®ã³ãŒãã«ã¯ã JavaScriptã®æ¯èŒäŸãä»å±ããŠããŸã ã
For-inåœä»€
æãåçŽãªforã«ãŒãããå§ããŸãããã
for (var i = 0; i < 10; i++) { //... }
CoffeeScriptã§ã¯ã次ã®ããã«èšè¿°ãããŸãã
for i in [0...10]
ç¯å²ã¯ãå埩åæ°ã決å®ããããã«äœ¿çšãããŸãã
ãã®å Žåã 0 ... 10ã®ç¯å²ã¯ãã«ãŒãã®10åã®ç¹°ãè¿ããå®è¡ããããšãæå³ããŸãã
ããããã¿ã€ãi <= 10ã®æ¡ä»¶ãèšå®ããå¿
èŠãããå Žåã¯ã©ãã§ããããïŒ
for i in [0..10]
äžèŠãäœãå€ãã£ãŠããŸããããããèŠããšãç¯å²å
ã§1ã€ã®ãã€ã³ããå°ãªããªã£ãŠããããšãããããŸãã
ãã®çµæã次ã®ãšã³ããªãååŸãããŸãã
for (var i = 0; i <= 10; i++) { //... }
ç¯å²ã®åæå€ãæåŸã®[10..0]ãã倧ããå Žåãçµæãå転ããéãµã€ã¯ã«ãåŸãããŸãã
for (var i = 10; i >= 0; i--) { //.. }
è² ã®ç¯å²å€ã®äœ¿çšã蚱容ãããããšã«æ³šæããŠãã ããïŒ
for i in [-10..0]
ãããã£ãŠãé
åã«è² ã®å€ãå
¥åã§ããŸãã
[0..-3]
nã®éä¹ãèšç®ããé¢æ°ã®äŸã䜿çšããŠãå®éã®ç¶æ³ãèããŠã¿ãŸãããã
JavaScriptïŒ
var factorial = function(n) { var result = 1; for (i = 1; i <= n; i++) { result *= i; } return result; }; factorial(5) //120
CoffeeScriptïŒ
factorial = (n) -> result = 1 for i in [1..n] result *= i result factorial 5
äžèšã®äŸãããããããã«ã CoffeeScriptã³ãŒãã¯JavaScriptãããã³ã³ãã¯ãã§èªã¿ãããã§ãã
ãã ãããã®ã³ãŒãã¯å°ãç°¡ç¥åã§ããŸãã
factorial = (n) -> result = 1 result *= i for i in [1..n] result
ãã®èšäºã§ã¯ãããã¯éä¹èšç®ã®æåŸã®äŸã§ã¯ãªããããå¹æçãªæ¹æ³ã«ã€ããŠã¯å°ãåŸã§æ€èšããŸãã
[...]
ãããã¯ããå°ãéžè±ããŠãæ§æã®é©çšã«é¢é£ããå¥ã®èå³æ·±ãç¹ã«èšåããããšãèš±å¯ããŸã[...]ïŒã¹ã©ã€ã¹ïŒ ã
ä»ã®èª°ãã®ã³ãŒãã«ã¯ã次ã®ãããªæ§é ãèŠã€ããããšããããŸãã
'a,b,c'[''...][0]
ãã¡ãããããã¯æ¬¡ã®ããšãæå³ããŸãã
'a,b,c'.slice('')[0]; //a
äžèŠãããšãããç¯å²ãã¹ã©ã€ã¹ãšåºå¥ããããšã¯éåžžã«å°é£ã§ãã äž»ã«2ã€ã®éãããããŸãã
æåã«ãã¹ã©ã€ã¹ã®1ã€ã®æ¥µç«¯ãªå€ãã¹ãããã§ããŸã
[1...]
ããã§ã¯ããã®è¡šçŸã®ç¿»èš³åŸã«åŸããããã®ã«ç¹ã«æ³šæãæããããšæããŸãã
var __slice = Array.prototype.slice; __slice.call(1);
ããã¯ãé¢æ°ã®åŒæ°ã®ãªã¹ããååŸãããªã©ãå€ãã®ç¶æ³ã§äŸ¿å©ã§ãã
fn = -> [arguments...] fn [1..3]
CoffeeScriptã«ã¯ãé¢æ°åŒæ°ã®ãªã¹ããååŸããããã®ããå®å
šã§ãšã¬ã¬ã³ããªãªãã·ã§ã³ïŒ
splats ïŒãããããšã«æ³šæããŠãã ããã
fn = (args...) -> args fn [1..3]
ç®è¡æŒç®ãšè«çæŒç®ã䜿çšããããšãã§ããŸãã
[1 + 1...]
第äºã«ãã¹ã©ã€ã¹ã®åã«ãªããžã§ã¯ããèš±å¯ãããŸã
[1..10][...2]
第äžã«ãã¹ã©ã€ã¹ã§ã®åæã®äœ¿çšã¯èš±å¯ãããŸã
[1,2,3...]
ãã®äŸã§ã¯ãåçŽãªé£çµæäœãå®è¡ããŸãã
[1, 2].concat(Array.prototype.slice.call(3));
ãã䟿å©ãªäŸïŒ
list1 = [1,2,3] list2 = [4,5,6] [list1, list2 ...]
ãªã¹ãã®ç解
CoffeeScriptã§ãªããžã§ã¯ããæäœããããã®æãå°è±¡çãªæ§æã¯ã ãªã¹ãã®å
å
è¡šèšã§ãã
1ããnãŸã§ã®ãã¹ãŠã®éä¹èšç®ã®ãªã¹ããååŸããæ¹æ³ã®äŸïŒ
factorial = (n) -> result = 1 result *= i for i in [1..n] factorial 5
次ã«ãããèå³æ·±ãäŸãèŠãŠã ãã±ãŒã·ã§ã³ãªããžã§ã¯ãã®æåã®5ã€ã®ã¡ã³ããŒããªã¹ãããŸãã
(i for i of location)[0...5]
JavaScriptã§ã¯ããã®ã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
var list = function() { var result = []; for (var i in location) { result.push(i); } return result; }().slice(0, 5);
é
åã®èŠçŽ ïŒã€ã³ããã¯ã¹ã§ã¯ãªãïŒã®ãªã¹ãã衚瀺ããã«ã¯ããã1ã€ã®ãã©ã¡ãŒã¿ãŒãèšå®ããå¿
èŠããããŸãã
foo = (value for i, value of ['a', 'b', 'c'][0...2])
äžæ¹ã§ã¯ããªã¹ãåŒã¯ãªããžã§ã¯ããæäœããããã®éåžžã«å¹ççã§ã³ã³ãã¯ããªæ¹æ³ã§ãã äžæ¹ã JavaScriptã§ç¿»èš³ããåŸã«ã©ã®ã³ãŒããåãåãããæ確ã«ç解ããå¿
èŠããããŸã ã
ããšãã°ã 0ã2ã®èŠçŽ ã®ãªã¹ãã衚瀺ããäžèšã®ã³ãŒãã¯ã次ã®ããã«ããã«å¹æçã«æžãæããããšãã§ããŸãã
foo = (value for value in ['a', 'b', 'c'][0...2])
ãŸãã¯ïŒ
['a', 'b', 'c'].filter (value, i) -> i < 2
ãã®æç¹ã§ãã¡ãœããåãšéãæ¬åŒ§ã®éã®ã¹ããŒã¹ã«ç¹ã«æ³šæããŠãã ããã ãã®ã®ã£ãããå¿
èŠã§ãïŒ
ã¹ããŒã¹ãã¹ããããããšã次ã®ããã«ãªããŸãã
['a', 'b', 'c'].filter(value, i)(function() { return i < 2; });
ä»ãããªãã¯ãããã.filterïŒïŒãªãã·ã§ã³ãæã奜ãŸããçç±ãç¥ããããšæãã§ããããïŒ
å®éã®ãšããã for-ofã¹ããŒãã¡ã³ãã䜿çšãããšããã©ã³ã¹ã¬ãŒã¿ãŒã¯å¿
èŠãªã«ãŒããããé
ãããŒãžã§ã³ãã€ãŸãfor-inã眮ãæããŸãã
ãããŒããã£ã¹ãçµæïŒ
var i, value; [ (function() { var _ref, _results; _ref = ['a', 'b', 'c'].slice(0, 2); _results = []; for (i in _ref) { value = _ref[i]; _results.push(value); } return _results; })() ];
ããã«çŽé¢ããããçµæã®ã³ãŒãã¯ã²ã©ãã§ãã
ããã§ã ãã£ã«ã¿ãŒã¡ãœããã䜿çšããŠååŸããã³ãŒããèŠãŠã¿ãŸãããã
['a', 'b', 'c'].filter(function(value, i) { return i < 2; });
ã芧ã®ãšãããå®ç§ã§å¹ççãªã³ãŒããåŸãããŸããïŒ
ãµãŒããŒã§CoffeeScriptã䜿çšããå Žåãå¿é
ããå¿
èŠã¯ãããŸãããããã§ãªãå Žåã¯ã IE9-ããã£ã«ã¿ãŒã¡ãœããããµããŒãããŠããªãããšãèŠããŠããå¿
èŠããããŸãã ãããã£ãŠãããªãèªèº«ããã®å¯çšæ§ã«æ³šæããå¿
èŠããããŸãïŒ
ãã®åŸãæŒç®å
ãåç¥ã®ããã«ã åŒã解éããããã«ã CoffeeScriptããŒãµãŒã¯ã€ã³ãã³ããæ¹è¡ããã£ãªããžãªã¿ãŒã³ãªã©ã解æããŸãã
以äžã¯ãæ°å€ã1ããnã®2ã®çŽ¯ä¹ã«å¢ããäžè¬çãªãµã€ã¯ã«ã§ãã
for i in [1...10] i * i
ããããããããããã«ãæ¹è¡ãšã€ã³ãã³ãã䜿çšããŸããã
ãã ããå®éã®ç¶æ³ã§ã¯ãã»ãšãã©ã®éçºè
ã¯ãã®åŒã1è¡ã§èšè¿°ããããšã奜ã¿ãŸãã
for i in [1...10] then i * i
while ã if / else ãããã³switch / whenã¹ããŒãã¡ã³ãã§ã¯ã thenã¹ããŒãã¡ã³ãã¯ããŒãµãŒã«åŒãåé¢ããããã«æ瀺ããŸãã
ãªãã¬ãŒã¿ãŒ
ãããŸã§ã¯ãã åçŽãª ããµã€ã¯ã«ã®ã¿ãèæ
®ããŠããŸããããç¹å®ã®ã¹ãããã§å€ãæ¬ èœããŠãããµã€ã¯ã«ã«ã€ããŠèª¬æããŸãã
2ã10ã®å¶æ°ã®ã¿ãåºåããŸãã
alert i for i in [0..10] by 2
JavaScriptã§ã¯ããã®ã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
for (var i = 2; i <= 10; i += 2) { alert(i); }
byæŒç®åã¯ãå埩ã¹ããããèšå®ã§ããèŠçŽ ã®ç¯å²ã«é©çšãããŸãã
é
åã®æ°å€ãèŠçŽ ã ãã§ãªããæååã§ãäœæ¥ã§ããŸãã
[i for i in 'Hello World' by 3]
byããã³thenæŒç®åã¯äžç·ã«äœ¿çšã§ããŸãã
[for i in 'hello world' by 1 then i.toUpperCase()]
ãã®äŸã¯å°ãé£è§£ã§ãããå®éã®ç¶æ³ã§ã¯ã 1〠ãã®ã¹ããããåçŽåããå¿
èŠããããŸãããããã§ãã ãã®åŸã®æŒç®åã®å
±åäœæ¥ã«ãããéåžžã«ã³ã³ãã¯ãã§å¹ççãªã³ãŒããèšè¿°ã§ããŸãã
èªåã®ãªãã¬ãŒã¿ãŒ
JavaScriptã¯å€ãã®å Žåã
.hasOwnPropertyïŒïŒã¡ãœããã䜿çšããŸãããã®ã¡ãœããã¯ãinæŒç®åãšã¯ç°ãªãããªããžã§ã¯ããããã¿ã€ããã§ãŒã³ã®ããããã£ããã§ãã¯ããŸããã
var object = { foo: 1 }; object.constructor.prototype.bar = 1; console.log('bar' in object);
for-inã«ãŒãã®æ¬äœã§
.hasOwnPropertyïŒïŒã¡ãœããã䜿çšããäŸãèããŠã¿ãŸãããã
var object = { foo: 1 }; object.constructor.prototype.toString = function() { return this.foo; }; for (i in object) { if (object.hasOwnProperty(i)) { console.log(i);
.toStringïŒïŒã¡ãœããããããã¿ã€ã
ãªããžã§ã¯ãã«è¿œå ããã«ãããããããã«ãŒãã®æ¬äœã«ã¯ãªã¹ããããŸããã çŽæ¥ã¢ã¯ã»ã¹ã§ããŸããïŒ
object.toString()
CoffeeScriptã¯ããããã®ç®çã®ããã«
ç¬èªã®ç¹å¥ãªæŒç®åãæäŸããŸãïŒ
object = foo: 1 object.constructor::toString = -> @foo for own i of object console.log i
for-ofã¹ããŒãã¡ã³ãã®2çªç®ã®ããŒã䜿çšããå¿
èŠãããå Žåã¯ãã«ã³ãã§åºåã£ãŠæå®ããå¿
èŠãããã
ç¬èªã®æŒç®åãå床远å ããå¿
èŠã¯ãããŸããã
for own key, value of object console.log '#{key}, #{value}'
æ¡ä»¶ä»ãif / elseã¹ããŒãã¡ã³ã
ããã§ãif / elseã¹ããŒãã¡ã³ããšã«ãŒããå
±æããããšã«é¢é£ããéåžžã«éèŠãªãã€ã³ãã«æ³šç®ããããšæããŸãã
JavaScriptã¢ããªã±ãŒã·ã§ã³ã§ã¯ãåæ§ã®ã³ãŒãã«ééããå ŽåããããŸãã
for (var i = 0; i < 10; i++) if (i === 1) break;
ãã®æ¹æ³ãæžããŠããéçºè
ã«ã€ããŠã¯è°è«ãããç¹ã«éé£ããŸããã
CoffeeScriptã§åŒãæ£ããèšè¿°ããæ¹æ³ã®ã¿ãéèŠã§ãã
æåã«é ã«æµ®ãã¶ã®ã¯ããããè¡ãããšã§ãã
for i in [0..10] if i is 1 break
ãããã CoffeeScriptã® åå¥è§£æã«ãŒã«ã«ãããšã ifã¹ããŒãã¡ã³ãã®åã«äºæããªã端æ«å€ãæ€åºããã解æãšã©ãŒãçºçããŸãïŒ
åã®è³æããã thenæŒç®åã䜿çšããŠåŒã1è¡ã§å®è£
ã§ããããšãèŠããŠããŸãã
for i in [0..10] then if i is 1 break
ãã ããããã¯åœ¹ã«ç«ã¡ãŸããã§ããã解æãšã©ãŒãåã³è¡šç€ºãããŸãã
ãããç解ããŠã¿ãŸããã...
å®éã«ã¯ã ifã¹ããŒãã¡ã³ãã¯ã thenã¹ããŒãã¡ã³ãã䜿çšã§ããä»ã®åœä»€ãšåãèŠåã«åŸããŸãã ã€ãŸããåŒãæ£ãã解æãããããã«ããã«ã¯ãåŒã®åŸã«ifæŒç®åãå床远å ããå¿
èŠããããŸãã
for i in [0..10] then if i is 1 then break
ãããã£ãŠã次ã®ã³ãŒããååŸããŸãã
for (i = 0; i <= 10; i++) { if (i === 1) { break; } }
ãµã€ã¯ã«ã®åã«ãCã®ããã©ãŒãã³ã¹ã確èªããå¿
èŠãããå ŽåããããŸãã æ¡ä»¶ïŒ
if (foo === true) { for (i = 0; i <= 10; i++) { if (i === 1) { break; } } }
é決å®è«çãªããŒã¿åŠçãšãªã¹ãåŒã®äœ¿çšã«ããã次ã®ããã«ã³ãŒããè¡šçŸã§ããŸãã
(if i is 1 then break) for i in [0..10] if foo is on
ãã®å Žåã解æãšã©ãŒã¯çºçããªãã£ããã thenæŒç®åã䜿çšããªãã£ããšããäºå®ã«æ³šæããŠãã ããïŒ
Whenå¥
byããã³thenã¹ããŒãã¡ã³ãã«ã€ããŠã¯ãã§ã«èª¬æããŸãããããªã¹ãã®æ¬¡ã®ã¹ããŒãã¡ã³ããã€ãŸãæ¡ä»¶ä»ãwhenã¹ããŒãã¡ã³ãã«ã€ããŠèª¬æããŸãã
ãããŠãåã®äŸã®ä¿®æ£ããå§ããŸãããã
if foo is on then for i in [0..10] when i is 1 then break
ãã®å Žåãã³ãŒãã¯ä»¥åã®ããŒãžã§ã³ãããå°ã倧ããããšãå€æããŸããããè¡šçŸåãšæå³ãã¯ããã«å€ããªããŸããã
æ£ã®æŽæ°nãæ³ãšããŠ1ãã10ãŸã§ã®æ°åã®é åºãæšå®ããæ¹æ³ã®å¥ã®äŸãèŠãŠã¿ãŸãããã
alert i for i in [1..10] when i % 2 is 0
JavaScriptã³ãŒãã«å€æããåŸïŒ
for (i = 1; i <= 10; i++) { if (i % 2 === 0) { alert(i); } }
ã芧ã®ãšãããwhenæŒç®åã䜿çšãããšãé
åãæäœããããã®ãªãã·ã§ã³ãããã«å¢ããŸãã
For-ofåœä»€
ãªã¹ãåŒãèŠãŠãããšãã«for-ofã¹ããŒãã¡ã³ãã䜿çšããäŸãèŠãŠããŸããã 次ã«ã for-ofã¹ããŒãã¡ã³ãã詳ããèŠãŠã¿ãŸããããfor -inã䜿çšãããšããªããžã§ã¯ãã®ããããã£ãå埩åŠçã§ããŸãã
JavaScriptã® for-inã¹ããŒãã¡ã³ããšæ¯èŒããŠãããã«æ¯èŒããŠã¿ãŸãããã
var object = { foo: 0, bar: 1 }; for (var i in object) { alert(key + " : " + object[i]); //0 : foo, 1 : bar }
ã芧ã®ãšããã次ã®æ§æã䜿çšããŠãªããžã§ã¯ãããããã£ã®å€ãååŸããŸããïŒ object [i] ã
CoffeeScriptã§ã¯ããã¹ãŠãããç°¡åã§ãããŸãããªã¹ãåŒã䜿çšããŠãªããžã§ã¯ãã®å€ãååŸã§ããŸãã
value for key, value of {foo: 1, bar: 2}
第äºã«ãããè€éãªåŒã®å Žåã䜿ãæ
£ããæŒç®åã䜿çšããŠããåºç¯ãªè¡šèšæ³ãé©çšã§ããŸãã
for key, value of {foo: 1, bar: 2} if key is 'foo' and value is 1 then break
JavaScriptã§ã¯ ã次ã®ããã«åãçµæãååŸã§ããŸãã
var object = { foo: 1, bar: 2 }; for (key in object) { if (key === 'foo' && object[i] === 1) { break; } }
for-inãå¹æçã«äœ¿çšããå¥ã®äŸïŒ
(if value is 1 then alert "#{key} : #{value}") for key, value of document
ããŒïŒïŒã¡ãœããããªããžã§ã¯ãããããã£ã®ãªã¹ããååŸããæãå¹æçãªæ¹æ³ã§ããããšãæãåºãããŠãã ããã
Object.keys obj {foo: 1, bar: 2}
ããããã£å€ãååŸããã«ã¯ã keysïŒïŒã¡ãœãããmapïŒïŒã¡ãœãããšçµã¿åãããŠäœ¿çšââããå¿
èŠããããŸãã
object = foo: 1 bar: 2 Object.keys(object).map (key) -> object[key];
whileã¹ããŒãã¡ã³ã
for-of / inã¹ããŒãã¡ã³ãã«å ããŠã CoffeeScriptã¯whileã¹ããŒãã¡ã³ããå®è£
ããŸãã
for-inã¹ããŒãã¡ã³ããèŠããšãã nã®äºå®ãèšç®ããããã«å¹ççãªæ¹æ³ã瀺ããšçŽæããŸãããæéãã¡ããã©ããã§ãïŒ
factorial = (n) -> result = 1 while n then result *= n-- result
ççŽã«èšã£ãŠãæããšã¬ã¬ã³ããªéä¹è§£ã¯æ¬¡ã®ãšããã§ãã
factorial = (n) -> !n and 1 or n * factorial n - 1
ã«ãŒãåœä»€
ç¡éã«ãŒããäœæããããšãå¯äžã®ç®çã§ããããããã®åœä»€ã«ã€ããŠã¯é·ãé説æããŸããã
loop then break if foo is bar
ReltatãããŒããã£ã¹ãïŒ
while (true) { if (foo === bar) { break; } }
æå°ãŸã§
untilã¹ããŒãã¡ã³ãã¯whileã€ã³ã¹ãã«ã¡ã³ããŒã·ã§ã³ã«äŒŒãŠããŸããã1ã€ã®äŸå€ã¯åŠå®ãåŒã«è¿œå ãããããšã§ãã
ããã¯ãããšãã°ãæååå
ã®æ¬¡ã®æåã»ããã®äœçœ®ãèŠã€ããã®ã«åœ¹ç«ã¡ãŸãã
expr = /foo/g; alert "#{array[0]} : #{expr.lastIndex}" until (array = expr.exec('foofoo')) is null
ReltatãããŒããã£ã¹ãïŒ
var array, expr; expr = /foo*/g; while ((array = expr.exec('foofoo')) !== null) { alert("" + array[0] + " : " + expr.lastIndex); } //foo : 3, foo : 6
äŸãããããããã«ãåŒã®çµæããŒãã«ãªããŸã§ã«ãŒããå®è¡ãããŸãã
Do-whileã¹ããŒãã¡ã³ã
CoffeeScriptã«ã¯ do-whileã¹ããŒãã¡ã³ãã®å®è£
ããªãããšãããã«èšããŸãã ãã ããåçŽãªæäœã䜿çšãããšã loopã¹ããŒãã¡ã³ãã䜿çšããŠéšåçãªåäœãåºåããããšãã§ããŸã ã
loop
é
åã¡ãœããïŒãã£ã«ã¿ãŒãforEachãããããªã©ïŒ
ãåç¥ã®ããã«ã CoffeeScriptã§ãJavaSctiptãšåãã¡ãœããããã¹ãŠå©çšå¯èœã§ãã
ã¡ãœããã®ãã®ã°ã«ãŒãå
šäœãåæããããšã¯æå³ããããŸãã;äŸãšããŠmapïŒïŒã¡ãœããã䜿çšããäžè¬çãªåäœåçã®ã¿ãèæ
®ããŸãã
3ã€ã®èŠçŽ ã®é
åãäœæãããããããæ£æ¹åœ¢ã«ããŸãã
[1..3].map (i) -> i * i
ReltatãããŒããã£ã¹ãïŒ
[1, 2, 3].map(function(i) { return i * i; });
å¥ã®äŸãèããŠã¿ãŸãããïŒ
['foo', 'bar'].map (value, i) -> "#{value} : #{i}"
2çªç®ã®åŒæ°ã§ããmapã¡ãœããã¯ãåŒã³åºãã³ã³ããã¹ããåãå
¥ããŸãã
var object = new function() { return [0].map(function() { return this }); }; // [Window map]
ãããå
ã§ãããèŠãããšãã§ããããã«ã WindowãæããåŒã³åºãã®ã³ã³ããã¹ããå€æŽããã«ã¯ãæ瀺çã«ãããè¡ãå¿
èŠããããŸãã
var object = new function() { return [0].map(function() { return this; }, this); }; // [Object {}]
CoffeeScriptã¯ããã®ç®çã®ããã«ç¹å¥ãª= =æŒç®åã䜿çšããŸãã
object = new -> [0].map (i) => @
ReltatãããŒããã£ã¹ãïŒ
var object = new function() { var _this = this; return [0].map(function() { return _this; }, this); };
ã€ãŸãããããã®é
åã¡ãœãããå¯èœãªéã䜿çšããŸãã
github'eã«æçš¿ãããããã®ã¡ãœããã®ã¯ãã¹ãã©ãŠã¶ãŒå®è£
CoffeeScript㧠ãããããã³ãã£ã«ã¿ãŒã¡ãœããã䜿çšããå®éã®äŸã¯ã github'eã®ç§ã®ãããžã§ã¯ãã®1ã€ã§ãèŠãããšãã§ããŸãã
æ瀺/ç絡ãè¡ã
ãåç¥ã®ããã«ã JavaScriptã¯Closuresãç©æ¥µçã«äœ¿çšããŸããã CoffeeScriptããã®åã³ã奪ããŸããã
å¿åã®èªå·±çµåé¢æ°ãäœæããããã«ã CoffeeScriptã¯doã¹ããŒãã¡ã³ãã䜿çšããŸãããã®ã¹ããŒãã¡ã³ãã¯ä»»æã®æ°ã®åŒæ°ãåããŸãã
äŸãèããŠã¿ãŸãããïŒ
array = []; i = 2 while i-- then array[i] = do (i) -> -> i array[0]()
ãã®ã³ãŒãã®æ¬è³ªã¯ãé
åãåããããšã§ãã åæã«ãé
åã®èŠçŽ ã«ã¯åºæ¬çãªå€ã¯å«ãŸããŸããããé¢æ°ã¯ããããèŠçŽ ã®ã€ã³ããã¯ã¹ãè¿ããŸãã
JavaScriptã§ã¯ãã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
var array = [], i = 2; while (i--) { array[i] = function(i) { return function() { return i; }; }(i); } array[0]() //0 array[1]() //1
ãã¹ããããåœä»€
ãã¹ããããåœä»€ã¯ä»ã®åœä»€ãšéãã¯ãªããåãèŠåã«åŸããŸãã
ããšãã°ãé
åã1ãã3ã®ãã¢ã®èŠçŽ ã§åããŸãã
list = [] for i in [0..2] for j in [1..2] list.push i list
ã芧ã®ãšãããè€éãªããšã¯äœããããŸããïŒ
ãããããããã1è¡ã§æžããããšæãã§ãããã ããã§ã¯ããšã³ããªãåçŽåããŠã¿ãŸãããã
list = [] for i in [0..2] then for j in [1..2] then list.push i
PSïŒç§ã¯å人çã«ãã®ãããªã¬ã³ãŒãã䜿çšããŸããããé
ããæ©ããä»ã®èª°ãã®ã³ãŒããæäœããªããã°ãªããªãã®ã§ããããæžãããšãèš±ãããããšãç¥ã£ãŠããã¹ãã§ãã
ãããã2çªç®ã®ãµã€ã¯ã«ã®åã«äœããã®åŒãè¿œå ããå¿
èŠãããå Žåã¯ã©ãã§ããããã
äŸãšããŠã0ã3ããèŠçŽ ã®3ã€ã®ãã¢ãå°ãåºããŸãã
list = [] for i in [0..2] list.push i for j in [1..1] list.push i list
ããã¯æ£ãããªãã·ã§ã³ã§ãããæ¹åãã¹ãç¹ã¯ããŸããããŸããã 2è¡ç®ã®åã«æ瀺çãªèå¥ãå¿
èŠãªã®ã§ããã¹ãŠã1è¡ã§æžãããšãã§ããŸããã ãããããµã€ã¯ã«ã®æ¬äœã¯çãè¡šèšã§æžãããšãã§ããŸãã
list = [] for i in [0..2] list.push i list.push i for j in [1..1] list
3è¡ç®ã§ã¯ãé²é³ã®ãã¬ãã£ãã¯ã¹åœ¢åŒãšãã¹ããã£ãã¯ã¹åœ¢åŒã®äž¡æ¹ã䜿çšã§ããŸãã
jQueryãªã©
CoffeeScriptã®å Žå ãã©ã®JavaScriptã©ã€ãã©ãªã䜿çšããŠãåé¡ãããŸããã
æãéèŠãª
jQueryé¢æ°
-.readyïŒïŒããå§ããŸããã
.readyïŒïŒïŒ
$ -> @
ãããŒããã£ã¹ãçµæïŒ
$(function() { return this; });
ç§ã¯ããªãã®ããšã¯ç¥ããŸãããããã®ãããªèšé²ã¯ã»ãšãã©ãã€ã掻çºãªç¬ããåŒãèµ·ãããŸã
ãªã¹ãã®æ¬¡ã®
jQueryã¡ãœããã¯
.eachïŒïŒã§ã ãããã¯ãæšæºã®
.forEachïŒïŒã¡ãœãããšã»ãŒåçã§ãã
$ .eachïŒ
$.each [1..3], (i) -> i
ãããŒããã£ã¹ãçµæïŒ
$.each([1, 2, 3], function(i) { return i; });
ECMASctipt 6
ECMASctipt 6æšæºã®å°æ¥ã®éçºã«èå³ããªãå Žåã¯ããã®ã»ã¯ã·ã§ã³ãå®å
šã«ã¹ãããã§ããŸãããåç¥ã®ããã«ãå°æ¥ã®
ECMASctipt 6æšæº
ã§ã¯ããžã§ãã¬ãŒã¿ãã€ãã¬ãŒã¿ããªã¹ãåŒãå®è£
ããäºå®ã§ãã
Firefoxã¯çŸåšãã»ãšãã©ã®ãã©ããæšæºããµããŒãããŠããŸãã
ãªããããããŠããã®ã§ããïŒ
å®éãå°æ¥ã®ES6æ§æã¯ãä»æ¥ã®CoffeeScriptãšã»ãŒå®å
šã«äºææ§ããããŸããã
ããšãã°
ãåœä»€ã®
for ...ã¯å¿
èŠä»¥äžã«äžè¬çã«ãªããŸããã
[value for key, value of [1,2,3]]
åºåã§ã¯ã次ã®
ç°åžžãçºçããŸãã
var key, value; [ (function() { var _ref, _results; _ref = [1, 2, 3]; _results = []; for (key in _ref) { value = _ref[key]; _results.push(value); } return _results; })() ]; //[1, 2, 3]
å°æ¥ã®æšæºã§ã¯ããªããžã§ã¯ããä»ããå埩ã®äœ¿çšãå¯èœã«ãªããŸãããããã¯ã¯ããã«ç°¡åã§ãã
[for i of [1,2,3]]
ãããã§ããã
åŒãžã§ãã¬ãŒã¿ãå©çšã§ããŸãïŒ
[i * 2 for each (i in [1, 2, 3])];
ãã®ãããªèšé²ãå¯èœã«ãªããŸãã
[i * 2 for each (i in [1, 2, 3]) if (i
ã€ãã¬ãŒã¿ãå©çšå¯èœã«ãªããŸãïŒ
var object = { a: 1, b: 2 }; var it = Iterator(lang); var pair = it.next();
ã€ãã¬ãŒã¿ã¯ãåŒãžã§ãã¬ãŒã¿ãšçµã¿åãããŠäœ¿çšââããããšãã§ããŸãã
var it = Iterator([1,2,3]); [i * 2 for (i in it)];
æ°ããæšæºã®ãªãªãŒã¹ã«ããã
CoffeScriptããã®å€ãã®ãããã¯ãã®ãããªãã®ã§ã¯ãªããªããã«ãŒãã«éçºè
ã¯ç ç³ã®äœçœ®ãç¶æããããã«å€ãã®äœæ¥ãè¡ãå¿
èŠãããããšã¯æããã§ãã 圌ãã®å¹žéãç¥ããŸãã