é常ã®é¢æ°ã¯ãåä¸ã®å¤ã ããè¿ãã¾ã(ãããã¯ãªã«ãè¿ãã¾ãã)ã
ã¸ã§ãã¬ã¼ã¿ã¯ãè¦æ±ã«å¿ãã¦æ¬¡ã ã«è¤æ°ã®å¤ãå ´åã«ãã£ã¦ã¯ç¡éã®æ°ã®å¤ãè¿ã(âçã¿åºãâ)ãã¨ãã§ãã¾ããããã㯠å復å¯è½(iterables) ã¨ä¸æãæ©è½ãããã¼ã¿ã¹ããªã¼ã ãç°¡åã«ä½æãããã¨ãã§ãã¾ãã
ã¸ã§ãã¬ã¼ã¿é¢æ°
ã¸ã§ãã¬ã¼ã¿ã使ããã«ã¯ãç¹å¥ãªæ§ææ§é : function*ããããã âã¸ã§ãã¬ã¼ã¿é¢æ°â ã使ç¨ããå¿
è¦ãããã¾ãã
ãã®ããã«ãªãã¾ã:
function* generateSequence() {
yield 1;
yield 2;
return 3;
}
generateSequence() ãå¼ã°ããã¨ããã³ã¼ãã¯å®è¡ããã¾ããã代ããã«ãâã¸ã§ãã¬ã¼ã¿â ã¨å¼ã°ããç¹å¥ãªãªãã¸ã§ã¯ããè¿ãã¾ãã
// "ã¸ã§ãã¬ã¼ã¿é¢æ°" 㯠"ã¸ã§ãã¬ã¼ã¿ãªãã¸ã§ã¯ã" ãçæãã¾ãã
let generator = generateSequence();
generator ãªãã¸ã§ã¯ã㯠âåçµããã颿°å¼ã³åºãâ ã¨æãããã¨ãã§ãã¾ãã:
使æã«ãã³ã¼ãã®å®è¡ã¯æåã®é¨åã§ä¸æåæ¢ããã¾ãã
ã¸ã§ãã¬ã¼ã¿ã®ã¡ã¤ã³ã®ã¡ã½ãã㯠next() ã§ããå¼ã°ããã¨ãæãè¿ã yield <value> æã¾ã§å®è¡ãåéãã¾ãããã®å¾ãå®è¡ã¯ä¸æåæ¢ããå¤ã¯å¤é¨ã®ã³ã¼ãã«è¿å´ããã¾ãã
ä¾ãã°ãããã§ã¯ã¸ã§ãã¬ã¼ã¿ã使ããæåã«æ»ãããå¤ãåå¾ãã¦ãã¾ã:
function* generateSequence() {
yield 1;
yield 2;
return 3;
}
let generator = generateSequence();
let one = generator.next();
alert(JSON.stringify(one)); // {value: 1, done: false}
next() ã®çµæã¯å¸¸ã«ãªãã¸ã§ã¯ãã§ã:
value: æ»ãããå¤done: ã³ã¼ããã¾ã çµãã£ã¦ããªãå ´åã¯false, ããã§ãªããã°true.
ç¾æç¹ã§ã¯ãæåã®å¤ã ãåå¾ãã¾ãã:
åã³ generator.next() ãå¼ã³ã¾ããããå®è¡ãåéããæ¬¡ã® yield ã貸ãã¾ãã:
let two = generator.next();
alert(JSON.stringify(two)); // {value: 2, done: false}
ããã¦ã3åç®ãå¼ã³åºãã¨ãå®è¡ã¯é¢æ°ãçµäºãã return æã«å°éãã¾ãã
let three = generator.next();
alert(JSON.stringify(three)); // {value: 3, done: true}
ããã§ã¸ã§ãã¬ã¼ã¿ãæ¸ã¿ã¾ãããdone:true ã§ããã夿ã§ããvalue:3 ãæçµçµæã¨ãã¦å¦çãã¾ãã
æ°ã㪠generator.next() å¼ã³åºãã¯ãã以䏿å³ããªãã¾ããããããè¡ã£ã¦ããåããªãã¸ã§ã¯ã {done: true} ãè¿å´ããã¾ãã
ã¸ã§ãã¬ã¼ã¿ã âãã¼ã«ããã¯â ããæ¹æ³ã¯ããã¾ãããããããgenerateSequence() å¼ã³åºãã«ãã£ã¦ãå¥ã®ç©ãä½ããã¨ã¯ã§ãã¾ãã
ããã¾ã§ã®ã¨ãããçè§£ãã¹ãæãéè¦ãªãã¨ã¯ãã¸ã§ãã¬ã¼ã¿é¢æ°ã¯é常ã®é¢æ°ã¨ã¯ç°ãªããã³ã¼ããå®è¡ããªããã¨ã§ããããã㯠âã¸ã§ãã¬ã¼ã¿å·¥å ´(ãã¡ã¯ããªã¼)â ã¨ãã¦æ©è½ãã¾ãã function* ã®å®è¡ã¯ã¸ã§ãã¬ã¼ã¿ãè¿ãããã®å¾ãã¸ã§ãã¬ã¼ã¿ã«å¤ãè¦æ±ãã¾ãã
function* f(â¦) ããã¨ã function *f(â¦)?ããã¯è»½ã宿çãªè³ªåã§ã両æ¹ã®æ§æã¯æ£ããã§ãã
ããããã¢ã¹ã¿ãªã¹ã¯ *ã¯ã¸ã§ãã¬ã¼ã¿é¢æ°ã§ãããã¨ã表ããååã§ã¯ãªã種é¡ã表ãã®ã§ãéå¸¸ã¯æåã®æ§æããã好ã¾ãã¾ãããããã£ã¦ãfunction ãã¼ã¯ã¼ãã«ä»ãã¦ãã ããã
ã¸ã§ãã¬ã¼ã¿ã¯å復å¯è½ã§ã
ãããã next() ã¡ã½ãããè¦ã¦æ¢ã«æ¨æ¸¬ãã¦ããã¨æãã¾ãããã¸ã§ãã¬ã¼ã¿ã¯ å復å¯è½(iterable)ã§ãã
for..of ã«ãã£ã¦ãå¤ãã«ã¼ããããã¨ãã§ãã¾ã:
function* generateSequence() {
yield 1;
yield 2;
return 3;
}
let generator = generateSequence();
for(let value of generator) {
alert(value); // 1, 次㫠2
}
ãã㯠.next().value ãå¼ã³åºãããããã¸ã§ãã¬ã¼ã¿ãæä½ããã®ã«ã¯ããã«è¦æ ãã®è¯ãæ¹æ³ã§ããã
â¦ããããæ³¨æãã¦ãã ãã: ä¸ã®ä¾ã§ã¯ 1 ã表示ãããå¾ 2 ã表示ãããããã§ãã¹ã¦ã§ãã3 ã¯è¡¨ç¤ºããã¾ãã!
ããã¯ãdone: true ã®ã¨ããfor-of ã¤ãã¬ã¼ã·ã§ã³ã¯æå¾ã® value ãç¡è¦ããããã§ãããªã®ã§ããã¹ã¦ã®çµæã for..of ã§è¡¨ç¤ºãããå ´åã¯ããããã yield ã§è¿ããªããã°ãªãã¾ãã:
function* generateSequence() {
yield 1;
yield 2;
yield 3;
}
let generator = generateSequence();
for(let value of generator) {
alert(value); // 1, 次㫠2, 次㫠3
}
å½ç¶ãã¸ã§ãã¬ã¼ã¿ã¯å復å¯è½ãªã®ã§ãã¹ãã¬ããæ¼ç®å... ã®ãããªãé¢é£ãããã¹ã¦ã®æ©è½ãå¼ã³åºããã¨ãã§ãã¾ãã:
function* generateSequence() {
yield 1;
yield 2;
yield 3;
}
let sequence = [0, ...generateSequence()];
alert(sequence); // 0, 1, 2, 3
ä¸ã®ã³ã¼ãã§ã¯ã...generateSequence() 㯠iterable ãã¢ã¤ãã ã®é
åã«å¤æãã¾ã(ã¹ãã¬ããæ¼ç®åã«ã¤ãã¦ã¯ãã£ãã¿ã¼ è¨äº "rest-parameters-spread-operator" ãè¦ã¤ããã¾ãã) ãèªãã§ãã ãã)ã
å復å¯è½(iterable)ã®ä»£ããã«ã¸ã§ãã¬ã¼ã¿ã使ç¨ãã
å°ãåããã£ãã¿ã¼ å復å¯è½ãªãªãã¸ã§ã¯ã ã§ãå¤ from..to ãè¿ãå復å¯è½ãª range ãªãã¸ã§ã¯ããä½ãã¾ããã
ããã§ããã®ã³ã¼ããæãåºãã¾ãããã:
let range = {
from: 1,
to: 5,
// for..of ã¯æåã«ãã®ã¡ã½ãããä¸åº¦å¼ã³åºãã¾ã
[Symbol.iterator]() {
// ...ãã㯠iterator ãªãã¸ã§ã¯ããè¿ãã¾ã:
// 以é, for..of ã¯ãã®ãªãã¸ã§ã¯ãã§ã®ã¿æ©è½ããæ¬¡ã®å¤ãè¦æ±ãã¾ãã
return {
current: this.from,
last: this.to,
// next() 㯠for..of ã«ã¼ãã®åã¤ãã¬ã¼ã·ã§ã³ã§å¼ã°ãã¾ã
next() {
// å¤ããªãã¸ã§ã¯ãã¨ãã¦è¿ãå¿
è¦ãããã¾ã {done:.., value :...}
if (this.current <= this.last) {
return { done: false, value: this.current++ };
} else {
return { done: true };
}
}
};
}
};
alert([...range]); // 1,2,3,4,5
ã¸ã§ãã¬ã¼ã¿ã使ç¨ãã¦å復å¯è½(iterable)ã®ã·ã¼ã±ã³ã¹ãä½ãã»ãããé¥ãã«ã¨ã¬ã¬ã³ãã§ã:
function* generateSequence(start, end) {
for (let i = start; i <= end; i++) {
yield i;
}
}
let sequence = [...generateSequence(1,5)];
alert(sequence); // 1, 2, 3, 4, 5
â¦ã§ãããä»®ã«ã«ã¹ã¿ã ã® range ãªãã¸ã§ã¯ããä¿æãããã¨ãããã©ããªãã§ããããï¼
Symbol.iterator ããã¸ã§ãã¬ã¼ã¿ã¸ã®å¤æ
ã¸ã§ãã¬ã¼ã¿ã Symbol.iterator ã¨ãã¦æä¾ãããã¨ã§ã両æ¹ã®ä¸çãããã¹ããå¾ããã¨ãã§ãã¾ã:
let range = {
from: 1,
to: 5,
*[Symbol.iterator]() { // [Symbol.iterator]: function*() ã®çç¸®è¨æ³
for(let value = this.from; value <= this.to; value++) {
yield value;
}
}
};
alert( [...range] ); // 1,2,3,4,5
range ãªãã¸ã§ã¯ãã¯ãã¾å復å¯è½ã§ãã
ããã¯é常ã«ä¸æãæ©è½ãã¾ãããªããªããrange[Symbol.iterator] ãå¼ã°ããã¨ãã:
- ãªãã¸ã§ã¯ããè¿ãã¾ã(ãã¾ã¯ã¸ã§ãã¬ã¼ã¿ã§ã)ã
- ãã®ãªãã¸ã§ã¯ãã¯
.next()ã¡ã½ãããæã£ã¦ãã¾ã(ãããã¸ã§ãã¬ã¼ã¿ã¯ãããæã£ã¦ãã¾ã)ã - ããã¯ã
{value: ..., done: true/false}ã®å½¢å¼ã§å¤ãè¿ãã¾ãã
ãã¡ãããããã¯å¶ç¶ã§ã¯ããã¾ãããã¸ã§ãã¬ã¼ã¿ã¯ iterable ãããç°¡åã«ãããã¨ãç®çã¨ãã¦ããã®ã§ããã®ããã«ãããã¨ãã§ãã¾ãã
ã¸ã§ãã¬ã¼ã¿ã使ç¨ããæå¾ã®ãã¿ã¼ã³ã¯ãå ã® iterable ãªã³ã¼ããããé¥ãã«ç°¡æ½ã§ããã¤åãæ©è½ãæä¾ãã¾ãã
ä¸ã®ä¾ã§ã¯ãæéã®æ°ååãçæãã¾ããããæ°¸é ã«å¤ãçæããã¸ã§ãã¬ã¼ã¿ãä½ããã¨ãå¯è½ã§ããä¾ãã°ãçµããã®ãªãç似乱æ°ã®åã§ãã
ããã¯å¿
ã for..of ã®ä¸ã§ break ãå¿
è¦ã¨ãã¾ããããã§ãªããã°ãã«ã¼ãã¯æ°¸é ã«ç¹°ãè¿ããããã³ã°ãã¾ãã
ã¸ã§ãã¬ã¼ã¿ã®åæ
ã¸ã§ãã¬ã¼ã¿ã®åæã¯ãã¸ã§ãã¬ã¼ã¿å士ãééçã« âåãè¾¼ãâ ãã¨ãå¯è½ã«ããã¸ã§ãã¬ã¼ã¿ã®ç¹å¥ãªæ©è½ã§ãã ä¾ãã°ã次ã®ã·ã¼ã±ã³ã¹ãçæãããã¨ãã¾ãã
- æ°å
0..9(æåã³ã¼ã 48â¦57) - 大æåã®
A..Zãç¶ã(æåã³ã¼ã 65â¦90) - ã¢ã«ãã¡ãããæå
a..zãç¶ã(æåã³ã¼ã 97â¦122)
次ã«ããããã鏿ããæåã§ãã¹ã¯ã¼ãã使ãããã¨ãèãã¾ã(åæ§ã«ãã¦æ§ææåã追å ãããã¨ãå¯è½ã§ã)ããæåã«ã·ã¼ã±ã³ã¹ãçæããå¿ è¦ãããã¾ãã
ãã§ã« function* generateSequence(start, end) ãããã®ã§ã3ã¤ã®ã·ã¼ã±ã³ã¹ãé ã«ä½ãã ãã®ã«ããããåå©ç¨ãã¾ãããã
é常ã®é¢æ°ã§ã¯ãè¤æ°ã®å¥ã ã®é¢æ°ããã®çµæãã¾ã¨ããããã«ã¯ãããããå¼ã³åºããçµæãæ ¼ç´ããæå¾ã«çµåãã¾ãã
ã¸ã§ãã¬ã¼ã¿ã®å ´åã¯ã次ã®ããã«ããã¹ãã¼ãã«è¡ããã¨ãã§ãã¾ã:
function* generateSequence(start, end) {
for (let i = start; i <= end; i++) yield i;
}
function* generatePasswordCodes() {
// 0..9
yield* generateSequence(48, 57);
// A..Z
yield* generateSequence(65, 90);
// a..z
yield* generateSequence(97, 122);
}
let str = '';
for(let code of generatePasswordCodes()) {
str += String.fromCharCode(code);
}
alert(str); // 0..9A..Za..z
ãã®ä¾ã«ããç¹å¥ãª yield* ãã£ã¬ã¯ãã£ãã¯åæãæ
å½ãã¾ããããã¯ãå¥ã®ã¸ã§ãã¬ã¼ã¿ã«å®è¡ã å§è²(ããªã²ã¼ã) ãã¾ãããããã¯ãåç´ã«è¨ãã¨ãã¸ã§ãã¬ã¼ã¿ãå®è¡ããããããããããå¼ã³åºãå
ã®ã¸ã§ãã¬ã¼ã¿èªä½ã«ãã£ã¦è¡ããããã®ããã«ããããã® yield ãå¤é¨ã«ééçã«è»¢éãã¾ãã
çµæã¯ãå ¥ãåã®ã¸ã§ãã¬ã¼ã¿ã®ã³ã¼ããã¤ã³ã©ã¤ã³å±éãããå ´åã¨åãã§ãã:
function* generateSequence(start, end) {
for (let i = start; i <= end; i++) yield i;
}
function* generateAlphaNum() {
// yield* generateSequence(48, 57);
for (let i = 48; i <= 57; i++) yield i;
// yield* generateSequence(65, 90);
for (let i = 65; i <= 90; i++) yield i;
// yield* generateSequence(97, 122);
for (let i = 97; i <= 122; i++) yield i;
}
let str = '';
for(let code of generateAlphaNum()) {
str += String.fromCharCode(code);
}
alert(str); // 0..9A..Za..z
ã¸ã§ãã¬ã¼ã¿ã®åæã¯ãããã¸ã§ãã¬ã¼ã¿ã®ããã¼ãå¥ã®ã¸ã§ãã¬ã¼ã¿ã«æ¿å ¥ããããã®ãèªç¶ãªæ¹æ³ã§ãã
å ¥ãåã®ã¸ã§ãã¬ã¼ã¿ããã®å¤ã®ããã¼ãç¡éã®å ´åã§ãåä½ãã¾ããããã¯ã·ã³ãã«ã§ä¸éçµæãæ ¼ç´ããããã®ä½åãªã¡ã¢ãªãå¿ è¦ã¨ãã¾ããã
âyieldâ ã¯åæ¹å
ããã¾ã§ãã¸ã§ãã¬ã¼ã¿ã¯ âå¼·åãããã¤ãã¬ã¼ã¿â ã®ããã§ãããããã¯ããå©ç¨ãããæ¹æ³ã§ãã
ããããå®éã«ã¯ã¸ã§ãã¬ã¼ã¿ã¯ããå¼·åã§æè»ã§ãã
ãªããªããyield ã¯åæ¹åã ããã§ã: çµæãå¤é¨ã«è¿ãã ãã§ãªããã¸ã§ãã¬ã¼ã¿å
é¨ã«å¤ã渡ãäºãã§ãã¾ãã
ããããããã«ã¯ã弿°ãæã¤ generator.next(arg) ãå¼ã³åºãå¿
è¦ãããã¾ãããã®å¼æ°ã¯ yield ã®çµæã«ãªãã¾ãã
ä¾ãè¦ã¦ã¿ã¾ããã:
function* gen() {
// 質åãå¤å´ã®ã³ã¼ãã«æ¸¡ãã¦çããå¾
ã¡ã¾ã
let result = yield "2 + 2?"; // (*)
alert(result);
}
let generator = gen();
let question = generator.next().value; // <-- yield ã¯å¤ãè¿ãã¾ã
generator.next(4); // --> çµæãã¸ã§ãã¬ã¼ã¿ã«æ¸¡ãã¾ã
- æåã®å¼ã³åºã
generator.next()ã¯å¸¸ã«å¼æ°ãªãã§ããå®è¡ãéå§ããæåã®yield(â2+2?â) ã®çµæãè¿ãã¾ãããã®æç¹ã§ãã¸ã§ãã¬ã¼ã¿ã¯å®è¡ã䏿忢ãã¾ã(ä¾ç¶ã¨ãã¦ãã®è¡ã«ãã¾ã)ã - 次ã«ãä¸ã®å³ã«ããããã«ã
yieldã®çµæã¯å¼ã³åºãã³ã¼ãã®question夿°ã«å ¥ãã¾ãã generator.next(4)ã§ã¸ã§ãã¬ã¼ã¿ãåéããçµæã¨ãã¦4ãå ¥ãã¾ã:let result = 4
å¤é¨ã®ã³ã¼ãã¯ããã« next(4) ãå¼ã³åºãå¿
è¦ã¯ãªããã¨ã«æ³¨ç®ãã¦ãã ãããè¨ç®ã«æéããããå ´åãããã¾ãããããæå¹ãªã³ã¼ãã§ãã:
// ããæéçµéå¾ã«ã¸ã§ãã¬ã¼ã¿ãåéãã
setTimeout(() => generator.next(4), 1000);
æ§æã¯å°ãå¤ã«è¦ããããããã¾ããã颿°ã¨å¼ã³åºãã³ã¼ãããäºãã«å¤ã渡ãåããã¨ã¯ãã£ãã«ããã¾ããããããããããã¾ãã«èµ·ãã£ã¦ãããã¨ã§ãã
ããæç½ã«ããããã«ãããã¯å¥ã®ä¾ã§ã:
function* gen() {
let ask1 = yield "2 + 2?";
alert(ask1); // 4
let ask2 = yield "3 * 3?"
alert(ask2); // 9
}
let generator = gen();
alert( generator.next().value ); // "2 + 2?"
alert( generator.next(4).value ); // "3 * 3?"
alert( generator.next(9).done ); // true
å®è¡ã®å³ã§ã:
- ã¾ãã
.next()ã¯å®è¡ãéå§ãã¾ããããã¦æåã®yieldã«å°éãã¾ãã - çµæã¯å¤é¨ã®ã³ã¼ãã«è¿å´ããã¾ãã
- 2ã¤ç®ã®
.next(4)ã¯ã4ãæåã®yieldã®çµæã¨ãã¦ã¸ã§ãã¬ã¼ã¿ã«æ»ããå®è¡ãåéãã¾ãã - â¦2ã¤ç®ã®
yieldã«å°éãã¾ããããã¯ã¸ã§ãã¬ã¼ã¿å¼ã³åºãã®çµæã«ãªãã¾ãã - 3ã¤ç®ã®
.next(9)2ã¤ç®ã®yieldã®çµæã¨ãã¦9ãã¸ã§ãã¬ã¼ã¿ã«æ¸¡ãå®è¡ãåéãã¾ããããã¦é¢æ°ã®çµããã«å°éããã®ã§ãdone: trueã§ãã
ãã㯠âãã³ãã³â ã²ã¼ã ã®ããã§ããå next(value) (æåã®ãã®ãé¤ã) ã¯ã¸ã§ãã¬ã¼ã¿ã«å¤ã渡ããããã¯ç¾å¨ã® yield ã®çµæã«ãªããæ¬¡ã® yield ã®çµæãæ»ãã¾ãã
generator.throw
ä¸ã®ä¾ã§è¦ãããã«ãå¤é¨ã®ã³ã¼ã㯠yield ã®çµæã¨ãã¦å¤ãã¸ã§ãã¬ã¼ã¿ã«æ¸¡ãå¯è½æ§ãããã¾ãã
â¦ããããããã§ã¨ã©ã¼ãèµ·ãã(ã¹ãã¼ãã)ãã¨ãã§ãã¾ããã¨ã©ã¼ãçµæã®1ã¤ãªã®ã§ãããã¯èªç¶ãªãã¨ã§ãã
ã¨ã©ã¼ã yield ã«æ¸¡ãã«ã¯ãgenerator.throw(err) ãå¼ã³åºãå¿
è¦ãããã¾ãããã®å ´åãerr 㯠yield ã®ããè¡ã«æãããã¾ãã
ä¾ãã°ãããã§ "2 + 2?" ã® yield ã¯ã¨ã©ã¼ã«ãªãã¾ã:
function* gen() {
try {
let result = yield "2 + 2?"; // (1)
alert("The execution does not reach here, because the exception is thrown above");
} catch(e) {
alert(e); // ã¨ã©ã¼ã表示ãã¾ã
}
}
let generator = gen();
let question = generator.next().value;
generator.throw(new Error("The answer is not found in my database")); // (2)
ã¨ã©ã¼ã¯ãè¡ (2) ã§ã¸ã§ãã¬ã¼ã¿ã«ã¹ãã¼ãããyield ã®ããè¡ (1) ã§ä¾å¤ã¨ãªãã¾ããä¸ã®ä¾ã§ã¯ãtry..catch ãããããã£ããã表示ãã¦ãã¾ãã
ãã£ããããªãå ´åãä»ã®ä¾å¤ã®ããã«ãã¸ã§ãã¬ã¼ã¿ã¯å¼ã³åºãã³ã¼ãã§ âè½ã¡ã¾ãâã
å¼ã³åºãã³ã¼ãã®ç¾å¨ã®è¡ã¯ã(2) ã¨ã©ãã«ä»ãããã generator.throw ãæã¤è¡ã§ãããªã®ã§ã次ã®ããã«ããã§ãã£ãããããã¨ãã§ãã¾ã:
function* generate() {
let result = yield "2 + 2?"; // ãã®è¡ã§ã¨ã©ã¼
}
let generator = generate();
let question = generator.next().value;
try {
generator.throw(new Error("The answer is not found in my database"));
} catch(e) {
alert(e); // ã¨ã©ã¼ã表示ãã¾ã
}
ããã§ã¨ã©ã¼ããã£ããããªããã°ãé常ã©ãããå¤é¨ã®å¼ã³åºãã³ã¼ã(ããã°)ã¸æ¸¡ããããã£ãããããªããã°ã¹ã¯ãªãããå¼·å¶çµäºãã¾ãã
ãµããª
- ã¸ã§ãã¬ã¼ã¿ã¯ã¸ã§ãã¬ã¼ã¿é¢æ°
function*(â¦) {â¦}ã«ããçæããã¾ãã - ã¸ã§ãã¬ã¼ã¿å
é¨ã«ã®ã¿
yieldæ¼ç®åãåå¨ãã¾ãã - å¤é¨ã®ã³ã¼ãã¨ã¸ã§ãã¬ã¼ã¿ã¯
next/yieldå¼ã³åºããéãã¦çµæãããåããããã¨ãã§ãã¾ãã
ã¢ãã³ãª JavaScript ã§ã¯ãã¸ã§ãã¬ã¼ã¿ã¯ãã£ãã«ä½¿ç¨ããã¾ãããããããå®è¡ä¸ã«å¼ã³åºãã³ã¼ãã¨ãã¼ã¿ãããåããã颿°ã®æ©è½ã¯é常ã«ã¦ãã¼ã¯ã§ããããã便å©ãªã¨ããããã¾ãã
ã¾ããæ¬¡ã®ãã£ãã¿ã¼ã§ã¯ãéåæã®ã¸ã§ãã¬ã¼ã¿ã«ã¤ãã¦å¦ã³ã¾ãããã㯠for ã«ã¼ãã§éåæçã«çæããããã¼ã¿ãã®ã¹ããªã¼ã ãèªãã®ã«ä½¿ããã¾ãã
web ããã°ã©ãã³ã°ã§ã¯ããã°ãã°ã¹ããªã¼ãã³ã°ãã¼ã¿ãæ±ãã¾ããe.g. ãã¼ã¸ã³ã°ãããçµæãåå¾ããå¿ è¦ããããããããã¯ã¨ã¦ãéè¦ãªã¦ã¼ã¹ã±ã¼ã¹ã§ãã
ã³ã¡ã³ã
<code>ã¿ã°ã使ã£ã¦ãã ãããè¤æ°è¡ã®å ´åã¯<pre>ãã10è¡ãè¶ ããå ´åã«ã¯ãµã³ãããã¯ã¹ã使ã£ã¦ãã ãã(plnkr, JSBin, codepenâ¦)ã