Generator.prototype.next()
Baseline
åºãå©ç¨å¯è½
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2016å¹´9æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
next() 㯠Generator ã¤ã³ã¹ã¿ã³ã¹ã®ã¡ã½ããã§ã2 ã¤ã®ãããã㣠done 㨠value ãæã¤ãªãã¸ã§ã¯ããè¿ãã¾ãã next ã¡ã½ããã«å¼æ°ãæä¾ãã¦ãã¸ã§ãã¬ã¼ã¿ã¼ã¸å¤ãéããã¨ãã§ãã¾ãã
æ§æ
next()
next(value)
弿°
valueçç¥å¯-
ã¸ã§ãã¬ã¼ã¿ã¼ã¸éãå¤ã§ãã
ãã®å¤ã¯
yieldå¼ã®çµæã¨ãã¦ä»£å ¥ããã¾ããä¾ãã°variable = yield expressionã®å ´åã.next()颿°ã«æ¸¡ãããå¤ã¯variableã«ä»£å ¥ããã¾ãã
è¿å¤
以ä¸ã® 2 ã¤ã®ããããã£ãæã£ã Object ã§ãã
done-
è«çå¤ã§ãã
- ã¤ãã¬ã¼ã¿ã¼ãå復å¦çã®æ«å°¾ãéãã¦ããå ´åãå¤ã¯
trueã«ãªãã¾ãããã®å ´åãvalueã¯ãªãã·ã§ã³ã§ãã®ã¤ãã¬ã¼ã¿ã¼ã®è¿å¤ãæå®ãã¾ãã - ã¤ãã¬ã¼ã¿ã¼ã次ã®å¤ãçæã§ããå ´åãå¤ã¯
falseã«ãªãã¾ãã
- ã¤ãã¬ã¼ã¿ã¼ãå復å¦çã®æ«å°¾ãéãã¦ããå ´åãå¤ã¯
value-
ã¤ãã¬ã¼ã¿ã¼ã yield ã¾ã㯠return ãããä½ããã® JavaScript ã®å¤ã§ãã
ä¾å¤
TypeError-
ã¸ã§ãã¬ã¼ã¿ã¼ãæ¢ã«å®è¡ä¸ã§ããå ´åã«çºçãã¾ãã
ä¾
>next() ã®ä½¿ç¨
次ã®ä¾ã§ã¯ã next ã¡ã½ãããè¿ãç°¡åãªã¸ã§ãã¬ã¼ã¿ã¼ã¨ãªãã¸ã§ã¯ãã示ãã¾ãã
function* gen() {
yield 1;
yield 2;
yield 3;
}
const g = gen(); // Generator { }
g.next(); // { value: 1, done: false }
g.next(); // { value: 2, done: false }
g.next(); // { value: 3, done: false }
g.next(); // { value: undefined, done: true }
ãªã¹ãã§ã® next() ã®ä½¿ç¨
ãã®ä¾ã§ã¯ã getPage ã¯ãªã¹ããåãåã pageSize ä»¶ãã¨ã«ãã¼ã¸åå²ãã¾ããããããã® next å¼ã³åºãã¯åã
ã®ãã¼ã¸ãè¿ãã¾ãã
function* getPage(list, pageSize = 1) {
for (let index = 0; index < list.length; index += pageSize) {
yield list.slice(index, index + pageSize);
}
}
const list = [1, 2, 3, 4, 5, 6, 7, 8];
const page = getPage(list, 3); // Generator { }
page.next(); // { value: [1, 2, 3], done: false }
page.next(); // { value: [4, 5, 6], done: false }
page.next(); // { value: [7, 8], done: false }
page.next(); // { value: undefined, done: true }
ã¸ã§ãã¬ã¼ã¿ã¼ã¸å¤ãéã
ãã®ä¾ã§ã¯ next ãå¤ä»ãã§å¼ã³åºãã¦ãã¾ãã
ã¡ã¢: æåã®å¼ã³åºãã§ã¯ã¸ã§ãã¬ã¼ã¿ã¼ãä½ãçæãã¦ããªããããä½ããã°ãè¨é²ãã¾ããã
function* gen() {
while (true) {
const value = yield;
console.log(value);
}
}
const g = gen();
g.next(1); // Returns { value: undefined, done: false }
// No log at this step: the first value sent through `next` is lost
g.next(2); // Returns { value: undefined, done: false }
// Logs 2
仿§æ¸
| 仿§æ¸ |
|---|
| ECMAScript® 2027 Language Specification > # sec-generator.prototype.next > |