ã³ã¬ã¯ã·ã§ã³/é
åèŠçŽ ã®åŠçã¯ãäžè¬çã§é »ç¹ãªæäœã§ãã JavaScriptã«ã¯ãåçŽãª
for(;;)
ããã³
for a in b
ã§å§ãŸãã³ã¬ã¯ã·ã§ã³ããã©ããŒã¹ããæ¹æ³ãããã€ããããŸã
var divs = document.querySelectorAll('div'); for (var i = 0, c = divs.length; i < c; i++) { console.log(divs[i].innerHTML); }
var obj = {a: 1, b: 2, c: 3}; for (var i in obj) { console.log(i, obj[i]); }
Arrayãªããžã§ã¯ãã«ã¯ã
map(), filter()
ãã¹ãŠã®èŠçŽ ã«å¯Ÿããèµ°æ»ã¡ãœããããããŸã
var numbers = [1, 2, 3, 4, 5]; var doubled = numbers.map(function (item) { return item * 2; }); console.log(doubled);
Firefoxã«ã¯é
åå
å
衚èšããããŸã
var numbers = [1, 2, 3, 4]; var doubled = [i * 2 for each (i in numbers)]; console.log(doubled);
ã€ãã¬ãŒã¿ãŒãšãžã§ãã¬ãŒã¿ãŒã¯ãJavaScript 1.7ïŒMozillaã«ããïŒã§Firefox 2+ã«ç»å ŽããŸããïŒã»ãšãã©ãã¹ãŠã®ãã©ãŠã¶ãŒã§æŸèæã§ããšãã¥ã¬ãŒããããæ¹æ³ã«ã€ããŠã¯èšäºã§èª¬æããŸãïŒã€ãã¬ãŒã¿ãŒãšãžã§ãã¬ãŒã¿ãŒ
for in
ããªããžã§ã¯ãã®ãªã¹ãå
ã®æ¬¡ã®èŠçŽ ãååŸããããã»ã¹ãã«ãã»ã«åããŸãã
å€ãã®å Žåãé
åã®èŠçŽ ãèšè¿°ããŠåŠçããããã«ãå€§èŠæš¡ãªæ§é ãèšè¿°ããŸããå€ãã®å Žåããã®äžéšãã³ããŒããŠè²Œãä»ããŸãã ãžã§ãã¬ãŒã¿ãŒãšã€ãã¬ãŒã¿ãŒã®ã¿ã¹ã¯ã¯ãæ§æç³ã远å ããŠãã®ããã»ã¹ãæ¹è¯ããããšã§ãã
ã€ãã¬ãŒã¿
JavaScriptã§ã¯ãã»ãšãã©ãã¹ãŠã®ãªããžã§ã¯ãããã€ãã¹ã§ããããšã誰ããç¥ã£ãŠããŸãã
é
å var object = [1,2,3]; for (var i in object) { console.log(i, object[i]); }
察象 var object = {a:1, b:2, c:3}; for (var i in object) { console.log(i, object[i]); }
ã²ã var object = 'abc'; for (var i in object) { console.log(i, object[i]); }
ããçš®ã®ãªã¹ã var object = document.querySelectorAll('div'); for (var i in object) { if (object.hasOwnProperty(i)) { console.log(i, object[i]); } }
ãã¹ãŠã®ãªããžã§ã¯ããé çªã«ç§»åããã·ãŒã±ã³ã¹ãå¶åŸ¡ããããšã¯ã§ããŸããã ã€ãã¬ãŒã¿ã«ãåæ§ã®ã€ã³ã¿ãŒãã§ã€ã¹ããããŸãããèŠçŽ ãå¶åŸ¡ããæ©èœãæäŸããŸãã
ã€ãã¬ãŒã¿ã¯ããã®ã·ãŒã±ã³ã¹ã§çŸåšã®äœçœ®ïŒã«ãŒãœã«ïŒãç¶æããªãããã³ã¬ã¯ã·ã§ã³ã®èŠçŽ ã«1ã€ãã€ã¢ã¯ã»ã¹ããæ¹æ³ãç¥ã£ãŠãããªããžã§ã¯ãã§ãã JavaScriptã§ã¯ãã€ãã¬ãŒã¿ã¯ãã·ãŒã±ã³ã¹å
ã®æ¬¡ã®ãªããžã§ã¯ããè¿ã
next()
ã¡ãœãããæã€ãªããžã§ã¯ãã§ãã ãã®ã¡ãœããã¯ãã·ãŒã±ã³ã¹ãçµäºãããšãã«
StopIteration
äŸå€ãã¹ããŒããå ŽåããããŸãã
ã€ãã¬ãŒã¿ã¯ããŸããŸãªæ¹æ³ã§äœ¿çšã§ããŸããnext
next()
ã¡ãœãããçŽæ¥åŒã³åºããã
for...in
ãŸãã¯
for each
ïŒFFã®ã¿ïŒæ§æã䜿çšããŸãã
ã€ãã¬ãŒã¿ãäœæããæ¹æ³ã¯ããã€ããããŸãã
ã€ãã¬ãŒã¿é¢æ°ãåŒã³åºã
var lang = { name: 'JavaScript', birthYear: 1995 }; var it = Iterator(lang);
ã€ãã¬ãŒã¿ãäœæããåŸã
next()
ã䜿çšããŠ
it
ãªããžã§ã¯ããå埩ã§ããŸã
var pair = it.next();
åé¿çãšããŠã
for...in
ãŸãã¯
for each
䜿çšã§ããŸãã ãã€ãã¹ã¯ã
StopIteration
äŸå€ã
StopIteration
ããããšããã«åæ¢ããŸãã
var it = Iterator(lang); for (var pair in it) { console.log(pair);
Iterator()
å©ç¹ã®1ã€ã¯ã
object.hasOwnProperty
ããã§ãã¯ããå¿
èŠããªãã¯ããŒã«æã«ãç¬èªã®ããããã£ïŒ
querySelectorAll
ã¯ããŒã«ã®äŸãæãåºããŠãã ããïŒã®ã¿ããã€ãã¹ããããšã§ãã
Iterator()
ã¯é
åã«ã䜿çšã§ããŸãïŒ
var langs = ['JavaScript', 'Python', 'C++']; var it = Iterator(langs); for (var pair in it) { console.log(pair);
2çªç®ã®åŒæ°ã
Iterator
颿°ã«æž¡ãããå Žåãã€ã³ããã¯ã¹ã®ã¿ãå埩ãããŸãã
var langs = ['JavaScript', 'Python', 'C++']; var it = Iterator(langs, true); for (var pair in it) { console.log(pair);
ã€ã³ããã¯ã¹ãšå€ã«ã€ããŠã¯ã
let
ãšç Žå£çãªä»£å
¥ã䜿çšããŠç¬èªã®å€æ°ã匷調衚瀺ã§ããŸãïŒFFã®ã¿ïŒã
var langs = ['JavaScript', 'Python', 'C++']; var it = Iterator(langs); for (let [i, lang] in it) {
ãã®ã€ãã¬ãŒã¿ã®äœææ¹æ³ã¯ããŸãæçšã§ã¯ãªãã
Iterator
ãªãã®éåžž
for in
ãšäŒŒãŠããŸãã
ã€ãã¬ãŒã¿ãŒãäœæãã
äžéšã®ãªããžã§ã¯ãã¯ãç¹å¥ãªæ¹æ³ã§å埩ããå¿
èŠãããèŠçŽ ã®ã³ã¬ã¯ã·ã§ã³ã§ãã äŸïŒ
-Rangeãªããžã§ã¯ãã®å埩ã¯ãã»ããå
ã®æ°å€ãè¿ãå¿
èŠããããŸãã
-åºèæš¹ã®æåã®
æ€çŽ¢ãŸãã¯
æ·±ãæ€çŽ¢ã䜿çšããŠ
ãæšã®èããã€ãã¹ã§ããŸãã
-ããŒã¿ããŒã¹ãžã®ã¯ãšãªã®çµæã¯ã1ã€ã®ã¬ã³ãŒãã§ããŒã¿ã»ãããå埩ããŠè¿ãããšãã§ãããªããžã§ã¯ããšããŠè¿ãããŸãã
-ç¡éã®æ°åŠçã·ãŒã±ã³ã¹ã®å埩åïŒããšãã°ããã£ããããæ°åïŒã¯ãç¡éã®é·ãã®é
åãäœæããã«ãçµæã1ã€ãã€è¿ãå¿
èŠããããŸãã
ç¯å²ãä¿åããç°¡åãªRangeãªããžã§ã¯ããäœæããŸãããã
function Range(low, high){ this.low = low; this.high = high; }
次ã«ããã®ç¯å²ããã·ãŒã±ã³ã¹ãè¿ãã€ãã¬ãŒã¿ãäœæããŸãã ã€ãã¬ãŒã¿ã€ã³ã¿ãŒãã§ã€ã¹ã§ã¯ãã·ãŒã±ã³ã¹èŠçŽ ãè¿ããæåŸã«
StopIteration
äŸå€ãã¹ããŒãã
next()
ã¡ãœãããäœæããå¿
èŠããããŸãã
function RangeIterator(range){ this.range = range; this.current = this.range.low; } RangeIterator.prototype.next = function(){ if (this.current > this.range.high) throw StopIteration; else return this.current++; };
var ri = new RangeIterator(new Range(1, 10)); ri.next();
ã©ããããããããŸã䟿å©ã§ã¯ãããŸããã
RangeIterator
ã³ã³ã¹ãã©ã¯ã¿ãŒ
RangeIterator
__iterator__
ãã
__iterator__
ã¯ã
Range
ãªããžã§ã¯ãã§
__iterator__
ã¡ãœããã䜿çšããŸãã ãã®ã¡ãœããã¯ã
Range
ãªããžã§ã¯ãã®èŠçŽ ãå埩åŠçãããšãã«åŒã³åºãããå埩åããžãã¯ãå«ã
RangeIterator
ãè¿ãå¿
èŠããããŸãã
Range.prototype.__iterator__ = function(){ return new RangeIterator(this); }; var range = new Range(3, 5); for (var i in range) { console.log(i);
ååã«å¿«é©ã§ãããå€ãã®äžå¿
èŠã
çºé»æ©
ä»»æã®ã€ãã¬ãŒã¿ã¯äŸ¿å©ã§ãããäœæããã«ã¯æ³šææ·±ãããã°ã©ãã³ã°ãšå
éšç¶æ
ã®èšæ¶ãå¿
èŠã§ãã ãžã§ãã¬ãŒã¿ã¯ãããäžè¬çãªä»£æ¿ææ®µã§ãã ãããã¯ããã®ç¶æ
ãèšæ¶ããåäžã®é¢æ°ã䜿çšããŠä»£æ¿ã¢ã«ãŽãªãºã ãå®çŸ©ããããšãå¯èœã«ããŸãïŒæéç¶æ
ãã·ã³ã«äŒŒãŠããŸãïŒã
ãžã§ãã¬ãŒã¿ãŒã¯ãã€ãã¬ãŒã¿ãŒãäœæãããã¡ã¯ããªãŒã®ããã«æ©èœããç¹å¥ãªã¿ã€ãã®é¢æ°ã§ãã å°ãªããšã1ã€ã®
yield
ãå«ã颿°ã¯ãžã§ãã¬ãŒã¿ãŒã«ãªããŸãã
泚ïŒãªãªãžãã«ã§ã¯ããžã§ãã¬ãŒã¿ãŒã¯Firefox 2+ã§JavaScript
<script type="application/javascript;version=1.7">
ãªãŒããŒã©ã€ããããããŒãžã§ã³ã§ã®ã¿å©çšå¯èœã§ã
ãžã§ãã¬ãŒã¿ãŒé¢æ°ãåŒã³åºããããšããã®æ¬äœã¯å®è¡ãããŸããã Iterator-GeneratorãäœæããŠè¿ãã³ã³ã¹ãã©ã¯ã¿ãŒãšããŠæ©èœããŸãã Iterator-Generatorã¡ãœãã
next()
ãåŒã³åºããã³ã«ã
yield
ãè¿ããããŸã§é¢æ°ã®æ¬äœãå®è¡ãããçµæãè¿ãããŸãã 颿°ã
return
çµäºãããã颿°ã®æ¬äœãçµäºãããšã
StopIteration
äŸå€ãã¹ããŒãããã€ãã¬ãŒã¿ãŒã¯åäœã忢ããŸãã
äŸã§èª¬æããŸãããïŒ
function simpleGenerator(){ yield "first"; yield "second"; yield "third"; for (var i = 0; i < 3; i++) { yield i; } } var g = simpleGenerator(); console.log(g.next());
Generator颿°ã¯ã
__iterator__
ãªããžã§ã¯ãã®
__iterator__
ã¡ãœãããšããŠäœ¿çšã§ããŸãã ããã«ãããã³ãŒãã®éã倧å¹
ã«åæžãããŸãã ãžã§ãã¬ãŒã¿ã䜿çšããŠRangeã§äŸãæžãæããŸãïŒ
function Range(low, high){ this.low = low; this.high = high; } Range.prototype.__iterator__ = function(){ for (var i = this.low; i <= this.high; i++) { yield i; } }; var range = new Range(3, 5); for (var i in range) { console.log(i);
ïŒåçããªã£ã
ãžã§ãã¬ãŒã¿ãŒã䜿çšãããšãç¡éã®ã·ãŒã±ã³ã¹ãäœæã§ããŸãã ãã£ããããæ°ã®äŸãèŠãŠã¿ãŸãããïŒ
function fibonacci(){ var fn1 = 1; var fn2 = 1; while (1){ var current = fn2; fn2 = fn1; fn1 = fn1 + current; yield current; } } var sequence = fibonacci(); console.log(sequence.next());
ãžã§ãã¬ãŒã¿ãŒé¢æ°ã«ã¯åŒæ°ãæž¡ãããšãã§ããŸãã
StopIteration
ãŸãã¯
return
ã䜿çšããŠãžã§ãã¬ãŒã¿ãŒãäžæã§ããŸãã
limit
åŒæ°ã䜿çšããŠãã£ããããæ°ã§äŸãæžãæããŸãã
function fibonacci(limit){ var fn1 = 1; var fn2 = 1; while (1) { var current = fn2; fn2 = fn1; fn1 = fn1 + current; if (limit && current > limit) { return; } yield current; } } var sequence = fibonacci(7); console.log(sequence.next());
é«åºŠãªãžã§ãã¬ãŒã¿ãŒ
ãžã§ãã¬ãŒã¿ã¯ããªã¯ãšã¹ãã«å¿ããŠæ¬¡ã®å€ãèšç®ããŸãã ããã«ãããäžèšã®äŸã®ããã«ãèšç®ãå°é£ãªã·ãŒã±ã³ã¹ãŸãã¯ç¡éã®ã·ãŒã±ã³ã¹ãäœæã§ããŸãã
next()
ã¡ãœããã«å ããŠãGenerator-Iteratorã«ã¯
send()
ã¡ãœãããããããžã§ãã¬ãŒã¿ãŒã®å
éšç¶æ
ã倿Žã§ããŸãã
send()
æž¡ãããå€ã¯ããžã§ãã¬ãŒã¿ãŒã忢ããæåŸã®
yield
çµæãšããŠè§£éãããŸãã
send()
åŒã³åºãåã«ã
next()
ãžã§ãã¬ãŒã¿ãŒãèµ·åããå¿
èŠããããŸãã
次ã«ã
send()
ã䜿çšããŠã·ãŒã±ã³ã¹ãåèµ·åããæžãæãããããã£ãããããžã§ãã¬ãŒã¿ãŒã瀺ããŸãã
function fibonacci(){ var fn1 = 1; var fn2 = 1; while (1){ var current = fn2; fn2 = fn1; fn1 = fn1 + current; var reset = yield current; if (reset){ fn1 = 1; fn2 = 1; } } } var sequence = fibonacci(); print(sequence.next());
throw()
ã¡ãœãããåŒã³åºãããšã«ããããžã§ãã¬ãŒã¿ãŒã«åŒ·å¶çã«äŸå€ãã¹ããŒãããããšãã§ããŸãã ãã®ã¡ãœããã¯1ã€ã®åŒæ°ãåãããžã§ãã¬ãŒã¿ãŒã
throw value;
ïŒ
throw value;
ïŒã ãã®äŸå€ã¯ããžã§ãã¬ãŒã¿ã®çŸåšåæ¢ããŠããã³ã³ããã¹ãïŒæåŸã®
yield
ãå ŽæïŒããã¹ããŒãããŸãã
ãžã§ãã¬ãŒã¿ãŒãéå§ãããŠããªãå ŽåïŒ
next()
ã¡ãœããã®åŒã³åºãããªãã£ãå ŽåïŒã
throw()
ã¯
next()
ãåŒã³åºãã
yield
å Žæã§äŸå€ãã¹ããŒããŸãã
close()
ã¡ãœããã䜿çšããŠãžã§ãã¬ãŒã¿ãŒãéããããšãã§ããŸãïŒ
ãã®ã¡ãœããã¯æ¬¡ã®ããšãè¡ããŸãã
-ãã¹ãŠã®
finally
ãããã¯ãå®è¡ãããŸã
StopIteration
ãããã¯ã
StopIteration
以å€ã®äŸå€ãã¹ããŒããå Žåããã®äŸå€ã¯
close()
ã¡ãœãããåŒã³åºãããã³ã³ããã¹ãã«ã¹ããŒãããŸã
-ãžã§ãã¬ãŒã¿ãŒã¯ç Žå£ãããŸã
åŒãžã§ãã¬ãŒã¿ãŒ
ãé
åãã¬ãŒã¹ãã«ããŒãã¯ãåŒã³åºããããš1ã€ã®éå€§ãªæ¬ ç¹ããããŸããããã¯ãé
åãåããŠã¡ã¢ãªãå æããŸãã é
åãå°ããå Žåã¯ç®ç«ããã倧ããªé
åã®å Žåã¯éåžžã«é«äŸ¡ã§ãããŸããèŠçŽ ã®æ°ãç¡éã®å Žåã¯ããé
åãã¬ãŒã¹ãã«ããŒãã¯æå³ããããŸããã
ãžã§ãã¬ãŒã¿ãŒã¯ããªã³ããã³ãã®èšç®ãå®è¡ããŸãã åŒãžã§ãã¬ãŒã¿ãŒã¯é
åãã¬ãŒã¹ãã«ããŒã«äŒŒãŠããŸãããåŒãžã§ãã¬ãŒã¿ãŒã¯é
åãäœæãã代ããã«ããªã³ããã³ãã§å®è¡ãããå埩åãžã§ãã¬ãŒã¿ãŒãäœæããŸãã ããããçããžã§ãã¬ãŒã¿ãŒãšåŒã¶ããšãã§ããŸãã
倿°ã®æŽæ°ãèµ°æ»ããå埩åããããšããŸãã éè€ããçªå·ãå埩åŠçããæ°ããã€ãã¬ãŒã¿ãäœæããŸãã ãé
åãã¬ãŒã¹ãã«ããŒãã䜿çšããŠãä¹ç®å€ãå«ãé
åå
šäœãã¡ã¢ãªã«äœæããŸãã
var doubles = [i * 2 for (i in it)];
åŒãžã§ãã¬ãŒã¿ãŒã¯ãå¿
èŠã«å¿ããŠæ°å€ãä¹ç®ããæ°ããã€ãã¬ãŒã¿ãŒãäœæããŸãã
var it2 = (i * 2 for (i in it)); print(it2.next());
åŒãžã§ãã¬ãŒã¿ãŒã¯ãåŒæ°ãšããŠé¢æ°ã«æž¡ãããšãã§ããŸãã ãã®å Žåã®è¿œå ã®æ¬åŒ§ã¯çç¥ã§ããŸãã
var result = doSomething(i * 2 for (i in it));
äŸ
æ°åã®2åã®Finobacciã·ãŒã±ã³ã¹ã¯éåžžã«ã¯ãŒã«ã§ãããã©ããããããçåœããã¯çšé ããã®ã§ãã 人çã®äŸãããã€ãèŠãŠã¿ãŸãããã
1. DOMããªãŒããã€ãã¹ããŸã
ãã®ããŒãžã«ã¯ããã€ãã®ãªã³ã¯ããããŸãã ããããã«ã€ããŠããã¡ã€ã³ãš
innerHTML
ãååŸããå¿
èŠãããã
innerHTML
ããã¡ã€ã³ãšäžèŽããå Žåãã³ã³ãœãŒã«ã«ãã¡ã€ã³ã衚瀺ããŸãã
ãã¹ããªã³ã¯ïŒ
<a href="http://ya.ru/"> </a> <a href="http://google.ru/"></a> <a href="http://habrahabr.ru/"></a> <a href="http://twitter.com/">twitter.com</a>
ãžã§ãã¬ãŒã¿ãŒãžã®ã³ãŒãïŒ
var aList = document.querySelectorAll('a'); for (var i = 0, c = aList.length, a, content, domain; i < c; i++) { a = aList[i]; content = a.innerHTML; domain = a.getAttribute('href').replace('http://', '').split('/').shift(); if (content === domain) { console.log(domain); } }
ãã¹ãŠãèªç¶ã§æç¢ºã§ãã ãããŠããã®ãµã€ã¯ã«ãä»ã®ãã§ãã¯ã«äœ¿çšããå¿
èŠãããå Žåã¯ïŒ ã³ãŒããã³ããŒããŸããïŒ ãžã§ãã¬ãŒã¿ãŒã圹ç«ã¡ãŸã;ïŒæžãæãïŒ
ã³ãŒãã¯
aDomainContentGenerator()
ããã³ãŒãã®å¹
ã倧ãããªãïŒããã¯éèŠãªãã©ã¹ã§ãïŒã
aDomainContentGenerator()
ãžã§ãã¬ãŒã¿ãŒãä»ã®ç®çã«äœ¿çšã§ããããã«ãªã
aDomainContentGenerator()
ã
2.ããªãŒãŠã©ãŒã¯
è¡ãæ£åšããããªãŒããããŸãã æé ã§è¡šç€ºããå¿
èŠããããŸãã
function Tree(left, label, right) { this.left = left; this.label = label; this.right = right; }
ã³ãŒãã«1ã€ã®å€§ããªæ§é ããããŸãã
for (var item in inorder(t.right)) { yield item; }
å°æ¥ããããã¯æ¬¡ã®ãã®ã«çœ®ãæããããŸãïŒ
yield for inorder(t.right);
ãžã§ãã¬ãŒã¿ãŒã¯
-å埩å¯èœãªãªããžã§ã¯ãã®çŸãããã©ããŒã¹ïŒãªã¹ãïŒãã¡ã€ã«å
ã®è¡ãããŒã¿ããŒã¹ãžã®ã¯ãšãªã®çµæïŒãããªãŒã®ååž°ãã©ããŒã¹ïŒXMLãHTMLããã€ããªãããã³ãã®ä»ã®ä»»æïŒãç¯å²ãªããžã§ã¯ãã®äœæãšãã©ããŒã¹ïŒ0..10ïŒ
-ã¢ã¯ã»ã¹ãã°ããã€ãã¹ããŸãã ããšãã°ã転éãããããŒã¿ã®éã«é¢ããæ
å ±ãåéããå¿
èŠãããããŒããŒã·ã§ã³ãããã¢ã¯ã»ã¹ãã°ãããã€ããããŸãã
-yieldã¯ãããã°æã«ãã¬ãŒã¯ãã€ã³ããšããŠæ©èœããŸã
-é·ããµã€ã¯ã«ãããã€ãã®éšåã«åå²ããããã«äœ¿çšã§ããŸãïŒæéãšåŠçããããµã€ã¯ã«èŠçŽ ã®æ°ã®äž¡æ¹ã§ïŒ
-æ¬äŒŒä¹±æ°ãŸãã¯ã·ãŒã±ã³ã¹ãžã§ãã¬ãŒã¿ãŒ
-ãŠã£ã¶ãŒã/ãã¹ã¿ãŒã®åºç€ïŒã¹ããããã€ã¹ãããã®ã€ã³ã¿ãŒãã§ã€ã¹ïŒ
-ã€ãã³ãã®åäœã倿Žããããã«äœ¿çšã§ããŸãïŒããšãã°ããã¿ã³ãã¯ãªãã¯ããïŒ
çºé»æ©ã®å©ç¹
1.ãªã³ããã³ãèšç®ãå®è¡ãã
2.äœåãªã¡ã¢ãªã䜿çšããªãã§ãã ãã
3.ã³ã¬ã¯ã·ã§ã³ã¢ã€ãã ãååŸããããã»ã¹ãã«ãã»ã«åãã
4.ã³ãŒãã䌞ã°ã
5.ãžã§ãã¬ãŒã¿ãŒã¯ããã€ãã©ã€ã³ã«æ¥çããããšã§ãã£ã«ã¿ãŒãšããŠäœ¿çšã§ããŸã
æ§èœ
Pythonãã¹ããã倿ãããšããžã§ãã¬ãŒã¿ãŒã¯éåžžã®ãµã€ã¯ã«ã«å£ããŸããã
詳现ã«ã€ããŠã¯ããã¬ãŒã³ããŒã·ã§ã³ã
ã·ã¹ãã ããã°ã©ãåããžã§ãã¬ãŒã¿ããªãã¯ã®æŠèŠ ãïŒã¹ã©ã€ã22ïŒãåç
§ããŠãã ããã
Generator vs Common Loopãã¹ãã«ãããšã
ãžã§ãã¬ãŒã¿ãŒã¯ãµã€ã¯ã«ããã3åã®1é
ããªããŸãã
ãã€äœ¿çšã§ããŸããïŒ
ãªãŒããŒã©ã€ãã䜿çšããFirefox 2+ã§ã¯ãJavaScriptããŒãžã§ã³ãããã«äœæã§ããŸãã æ®ãã¯æªåããŠããŸãã 1ã€ã®åªãããããžã§ã¯ãããããŸã-Google traceur-compilerã ãã®ã³ã³ãã€ã©ã«ãããES6 +ã®å°æ¥ã®ããŒãžã§ã³ã®ã³ãŒããES3ã³ãŒãã«åŠçã§ããŸãã ããããããã¯äžèœè¬ã§ã¯ãããŸãããäŸãããªãŒãŠã©ãŒãã³ã°ãã®ã³ãŒãã¯ã©ã®ãã©ãŠã¶ã§ãæ©èœããŸããã§ãã
TCã¯ãžã§ãã¬ãŒã¿ãŒã®for..inã«ãŒããçè§£ããŸããïŒ
for (var node in inorder(tree)) { console.log(node);
圌ãå¿
èŠ
for (let node : inorder(tree)) { console.log(node);
ãããããã®ãã¥ãŒã¯Firefoxãçè§£ããŸããã TCã¯
Function#bind
ã
Object.defineProperty
å¿
èŠãš
Function#bind
ãããã³ã³ãã€ã«ãããããŒãžã§ã³ã¯TCäœæè
ã®ãã©ãŠã¶
Object.defineProperty
Chromeã§ã®ã¿æ©èœããŸã:)ã ã³ã³ãã€ã«ããããžã§ãã¬ãŒã¿ãŒã®ã³ãŒãã¯ãæéç¶æ
ãã·ã³ã䜿çšãã
try catch
ããã®ä»ã®å€è³ªè
ãäžå¿ã«èžããŸãã ãã®ãããªãã³ãŒããã倿ããŸãã
function Tree(left, label, right) { this.left = left; this.label = label; this.right = right; } function inorder(t) { var $that = this; return { __traceurIterator__: function() { var $state = 20; var $storedException; var $finallyFallThrough; var $__1; var $__2; var $__3; var $__4; var $result = { moveNext:(function() { while(true) try { switch($state) { case 20: if(t) { $state = 7; break; } else { $state = 15; break; } case 7: $__2 = inorder(t.left).__traceurIterator__(); $state = 8; break; case 8: if($__2.moveNext()) { $state = 2; break; } else { $state = 5; $finallyFallThrough = 4; break; } case 2: $__1 = $__2.current; $state = 3; break; case 3: $result.current = $__1; $state = 8; return true; case 5: { if($__2.close) $__2.close(); } $state = 6; break; case 4: $result.current = t.label; $state = 10; return true; case 10: $__4 = inorder(t.right).__traceurIterator__(); $state = 19; break; case 19: if($__4.moveNext()) { $state = 13; break; } else { $state = 16; $finallyFallThrough = 15; break; } case 13: $__3 = $__4.current; $state = 14; break; case 14: $result.current = $__3; $state = 19; return true; case 16: { if($__4.close) $__4.close(); } $state = 17; break; case 6: $state = $finallyFallThrough; break; case 17: $state = $finallyFallThrough; break; case 15: $state = 22; case 22: return false; case 21: throw $storedException; default: throw "traceur compiler bug: invalid state in state machine" + $state; } } catch($caughtException) { $storedException = $caughtException; switch($state) { case 8: $state = 5; $finallyFallThrough = 21; break; case 2: $state = 5; $finallyFallThrough = 21; break; case 3: $state = 5; $finallyFallThrough = 21; break; case 19: $state = 16; $finallyFallThrough = 21; break; case 13: $state = 16; $finallyFallThrough = 21; break; case 14: $state = 16; $finallyFallThrough = 21; break; default: throw $storedException; } } }).bind($that) }; return $result; } }; } function make(array) { if(array.length == 1) return new Tree(null, array[0], null); return new Tree(make(array[0]), array[1], make(array[2])); } var tree = make([[['a'], 'b',['c']], 'd',[['e'], 'f',['g']]]); { var $__0 = inorder(tree).__traceurIterator__(); try { while($__0.moveNext()) { try { throw undefined; } catch(node) { node = $__0.current; { console.log(node); } } } } finally { if($__0.close) $__0.close(); } }
èšäºã®ååã®ã³ãŒã-圌ã«ãšã£ãŠãã¹ãŠãæªãããšã瀺ãããã«æ®ããã...ãããã«
ãªãªãžãã«ã§ã¯ããžã§ãã¬ãŒã¿ã¯Firefoxã§ã®ã¿äœ¿çšã§ããŸããã€ãŸãããžã§ãã¬ãŒã¿ã¯äœ¿çšã§ããŸããïŒãã ãããã¬ã€ããããšã¯ã§ããŸãïŒã
Function#bind
ãš
Object.defineProperty
ãçµäºããŠãããããã®å ŽåãTCã¯ã³ãŒããåä»ãªã¢ã³ã¹ã¿ãŒã«å€ããŠããŸãããããã®äœ¿çšã¯çãããã§ãã
ããããæ£åžžã«é©çšã§ããå¯äžã®å Žæã¯ãå°æ¥ã®
SpiderNodeã§ãã ã€ãã¬ãŒã¿ãšãžã§ãã¬ãŒã¿ã¯éåžžã«äŸ¿å©ãªãã®ã§ãã ã¯ã©ã€ã¢ã³ãã§ã¯ã5幎以å
ã«ãããã䜿çšããŸãïŒãã¹ãŠã®æ¢ç¥ã®çç±ã®ããïŒã ãµãŒããŒäžã§ãã§ããã°ããã«ã
èªã
1. MDC-
é
åã®å
å
衚èš2.
ES Harmonyã€ãã¬ãŒã¿ãŒ3.
ES Harmony Generators4. MDC-
MDCã€ãã¬ãŒã¿ããã³ãžã§ãã¬ãŒã¿ã¬ã€ã5. MDC-
JavaScript 1.7ã®æ°æ©èœ6.
traceur-compiler LanguageFeaturesJavaScriptã¯Pythonãã1-in-1ãžã§ãã¬ãŒã¿ãŒãšã€ãã¬ãŒã¿ãŒãåŒãç¶ããŸããããJavaScriptã®äŸã¯ãŸã ã»ãšãã©ãããŸããã PythonãªãœãŒã¹ãžã®ãªã³ã¯ãã¹ããŒããŸãã
7. PEP 380ãã
ãµããžã§ãã¬ãŒã¿ãŒã«å§ä»»ããããã®æ§æ ã
8. PEP 255ãã
åçŽãªãžã§ãã¬ãŒã¿ãŒ ã
9.ãã¬ãŒã³ããŒã·ã§ã³ã
ã·ã¹ãã ããã°ã©ããŒã®ããã®ãžã§ãã¬ãŒã¿ãŒããªãã¯ã¯ããã« ã
ææ¡ãåžæãæ¹å€ã¯å€§æè¿ã§ãïŒ
UPD远å
ãžã§ãã¬ãŒã¿ãŒãšå
±éã«ãŒããžã§ãã¬ãŒã¿ãŒã®ããã©ãŒãã³ã¹ãã¹ã