Generator
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2016å¹´9æ.
Generator ãªãã¸ã§ã¯ãã¯ã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ã«ãã£ã¦è¿ãããå復å¯è½ãããã³ã«ã¨ã¤ãã¬ã¼ã¿ã¼ãããã³ã«ã®ä¸¡æ¹ã«æºæ ãã¦ãã¾ãã
Generator 㯠Iterator ã¯ã©ã¹ã®ãµãã¯ã©ã¹ã§ãã
ã³ã³ã¹ãã©ã¯ã¿ã¼
Generator ã³ã³ã¹ãã©ã¯ã¿ã¼ã«é¢ãã JavaScript ã®å®ä½ã¯ããã¾ãããGenerator ã®ã¤ã³ã¹ã¿ã³ã¹ã¯ã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ããè¿ãå¿
è¦ãããã¾ãã
function* generator() {
yield 1;
yield 2;
yield 3;
}
const gen = generator(); // "Generator { }"
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
console.log(gen.next().value); // 3
ã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ã«ãã£ã¦çæããããã¹ã¦ã®ãªãã¸ã§ã¯ããå
±æããé ããããããã¿ã¤ããªãã¸ã§ã¯ãã ããããã¾ãããã®ãªãã¸ã§ã¯ãã¯ã¯ã©ã¹ã«è¦ãããããã Generator.prototype ã¨è¡¨è¨ããããã¨ãå¤ãã§ãããGeneratorFunction ãå®éã® JavaScript ã¨ã³ãã£ãã£ã§ãããããããé©åã«ã¯ GeneratorFunction.prototype.prototype ã¨å¼ã¶ã¹ãã§ããGeneratorã¤ã³ã¹ã¿ã³ã¹ã®ãããã¿ã¤ããã§ã¼ã³ãçè§£ããã«ã¯ãGeneratorFunction.prototype.prototype ãåç
§ãã¦ãã ããã
ã¤ã³ã¹ã¿ã³ã¹ããããã£
ãããã®ããããã£ã¯ Generator.prototype ã«å®ç¾©ããããã¹ã¦ã® Generator ã¤ã³ã¹ã¿ã³ã¹ã§å
±æããã¾ãã
Generator.prototype.constructor-
使ãããã¤ã³ã¹ã¿ã³ã¹ãªãã¸ã§ã¯ãã®ã³ã³ã¹ãã©ã¯ã¿ã¼é¢æ°ã§ãã
Generatorã¤ã³ã¹ã¿ã³ã¹ã§ã¯ãåæå¤ã¯GeneratorFunction.prototypeã§ããã¡ã¢:
Generatorãªãã¸ã§ã¯ãã¯ãããèªä½ã使ããã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ã¸ã®åç §ãæ ¼ç´ãã¾ããã Generator.prototype[Symbol.toStringTag]-
[Symbol.toStringTag]ããããã£ã®åæå¤ã§ãããæåå"Generator"ã§ãããã®ããããã£ã¯Object.prototype.toString()ã§ä½¿ç¨ããã¾ãã
ã¤ã³ã¹ã¿ã³ã¹ã¡ã½ãã
親ã§ãã Iterator ããç¶æ¿ããã¤ã³ã¹ã¿ã³ã¹ã¡ã½ãããããã¾ãã
Generator.prototype.next()-
yieldå¼ã§å¾ãããå¤ãè¿ãã¾ãã Generator.prototype.return()-
ã¸ã§ãã¬ã¼ã¿ã¼ã®æ¬ä½å ã§ãç¾å¨ã®åæ¢ä½ç½®ã«
returnæãæ¿å ¥ããããã®ããã«æ¯ãèããããã«ããã¸ã§ãã¬ã¼ã¿ã¼ãå®äºãã¾ããã¾ããtry...finallyãããã¯ã¨çµã¿åããããã¨ã§ãã¸ã§ãã¬ã¼ã¿ã¼ãã¯ãªã¼ã³ã¢ããå¦çãå®è¡ãããã¨ãã§ããããã«ãã¾ãã Generator.prototype.throw()-
ã¸ã§ãã¬ã¼ã¿ã¼ã®æ¬ä½ã«ããã¦ãç¾å¨ã®åæ¢ä½ç½®ã«
throwæãæ¿å ¥ããããã®ããã«æ¯ãèãã¾ããããã«ããã¸ã§ãã¬ã¼ã¿ã¼ã¯ã¨ã©ã¼ç¶æ ãèªèããã¨ã©ã¼ãå¦çããããã¯ãªã¼ã³ã¢ãããå®è¡ãã¦èªèº«ãçµäºãããããããã¨ãã§ãã¾ãã
ä¾
>ç¡éã¤ãã¬ã¼ã¿ã¼
ã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ã§ã¯ãå¤ã¯å¿ è¦ã«ãªãã¾ã§è©ä¾¡ããã¾ããããããã£ã¦ã¸ã§ãã¬ã¼ã¿ã¼ã¯ãæ½å¨çã«ç¡éã®ãã¼ã¿æ§é ãå®ç¾©ãããã¨ãã§ãã¾ãã
function* infinite() {
let index = 0;
while (true) {
yield index++;
}
}
const generator = infinite(); // "Generator { }"
console.log(generator.next().value); // 0
console.log(generator.next().value); // 1
console.log(generator.next().value); // 2
// â¦
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-generator-objects> |