Baseline Widely available
function*
宣è¨ï¼function
ãã¼ã¯ã¼ãã«ã¢ã¹ã¿ãªã¹ã¯ãä»ãããã®ï¼ã¯ã Generator
ãªãã¸ã§ã¯ããè¿ãã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ãå®ç¾©ãã¾ãã
ã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ã¯ GeneratorFunction
ã³ã³ã¹ãã©ã¯ã¿ã¼ãã颿°å¼ã®æ§æã使ç¨ãã¦å®ç¾©ãããã¨ãã§ãã¾ãã
function* generator(i) {
yield i;
yield i + 10;
}
const gen = generator(10);
console.log(gen.next().value);
// Expected output: 10
console.log(gen.next().value);
// Expected output: 20
æ§æ
function* name(param0) {
statements
}
function* name(param0, param1) {
statements
}
function* name(param0, param1, /* ⦠,*/ paramN) {
statements
}
ã¡ã¢: ã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ã«ã¯ã対å¿ããã¢ãã¼é¢æ°ã¯ããã¾ããã
弿°name
颿°åã
param
çç¥å¯
颿°ã®å½¢å¼ä¸ã®å¼æ°ã®ååã
statements
颿°ã®æ¬ä½ãæ§æããæã
ã¸ã§ãã¬ã¼ã¿ã¼ã¯å¦çãæãåºããããå¾ãã復帰ããããããã¨ãã§ãã颿°ã§ããã¸ã§ãã¬ã¼ã¿ã¼ã®ã³ã³ããã¹ãï¼å¤æ°ã®å¤ï¼ã¯å¾©å¸°ãã¦ãä¿åããã¾ãã
JavaScript ã®ã¸ã§ãã¬ã¼ã¿ã¼ã¯ãç¹ã«ãããã¹ã¨çµã¿åããããã¨ã§ãéåæããã°ã©ãã³ã°ã®ããã®é常ã«å¼·åãªãã¼ã«ã¨ãªããã³ã¼ã«ããã¯å°çãå¶å¾¡ã®é転ãªã©ã®ãããªã³ã¼ã«ããã¯ã®åé¡ããå®å ¨ã«è§£æ±ºã§ããããã§ã¯ãªããã®ã®ã軽æ¸ãããã¨ãã§ãã¾ãããããããããã®åé¡ã¯éåæé¢æ°ã使ç¨ããã¨ãããã«ã·ã³ãã«ã«è§£æ±ºãããã¨ãã§ãã¾ãã
ã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ãå¼ã³åºãã¦ã颿°ã¯ããã«ã¯å®è¡ããã¾ããã代ããã«ãã®é¢æ°ã®ã¸ã§ãã¬ã¼ã¿ã¼ãªãã¸ã§ã¯ããè¿ããã¾ããã¤ãã¬ã¼ã¿ã¼ã® next()
ã¡ã½ãããå¼ã³åºãããã¨ãã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ã®å¦çã¯ãã¤ãã¬ã¼ã¿ã¼ããè¿ãããå¤ãç¹å®ããæåã® yield
æ¼ç®åããã»ãã®ã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ã«å§ä»»ãã yield*
ã«éããã¾ã§å®è¡ããã¾ããnext()
ã¡ã½ããã¯ç£åºãããå¤ãå«ã value
ããããã£ã¨ãã¸ã§ãã¬ã¼ã¿ã¼ãæå¾ã®å¤ãæã¤ããçå½å¤ã§ç¤ºã done
ããããã£ãæã¤ãªãã¸ã§ã¯ããè¿ãã¾ãã弿°ã¤ãã§next()
ãå¼ã³åºãã¨ãã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ã®å®è¡ãåéãããå¦çã忢ãã¦ãã yield
å¼ã next()
ã®å¼æ°ã§ç½®ãæãã¾ãã
ã¸ã§ãã¬ã¼ã¿ã¼ã§ return
æãå®è¡ãããã¨ãã¸ã§ãã¬ã¼ã¿ã¼ãçµäºãã¾ãï¼ã¤ã¾ããããã«ãã£ã¦è¿ããããªãã¸ã§ã¯ãã® done
ããããã£ã true
ã«è¨å®ããã¾ãï¼ãå¤ãè¿ãããå ´åãããã¯ã¸ã§ãã¬ã¼ã¿ã¼ã«ãã£ã¦è¿ããããªãã¸ã§ã¯ãã® value
ããããã£ã¨ãã¦è¨å®ããã¾ãã return
æã¨ããä¼¼ã¦ãã¾ãããã¸ã§ãã¬ã¼ã¿ã¼ã®å
é¨ã§ã¨ã©ã¼ãçºçããå ´åã¯ãã¸ã§ãã¬ã¼ã¿ã¼ã®æ¬ä½ã®ä¸ã§ãã£ããããªãéããã¸ã§ãã¬ã¼ã¿ã¼ã¯çµäºãã¾ãã ã¸ã§ãã¬ã¼ã¿ã¼ãçµäºããã¨ããã以éã® next()
ã®å¼ã³åºãã§ã¯ããã®ã¸ã§ãã¬ã¼ã¿ã¼ã®ã³ã¼ãã¯å®è¡ãããã {value: undefined, done: true}
ã®å½¢ã®ãªãã¸ã§ã¯ããè¿ãããã ãã§ãã
function*
宣è¨ã¯ã¹ã³ã¼ãã®å
é ã«å·»ãä¸ãããããã®ã¹ã³ã¼ãã®ã©ãããã§ãå¼ã³åºããã¨ãã§ãã¾ãã
function* idMaker() {
let index = 0;
while (true) {
yield index++;
}
}
const gen = idMaker();
console.log(gen.next().value); // 0
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
console.log(gen.next().value); // 3
// â¦
yield* ã使ç¨ããä¾
function* anotherGenerator(i) {
yield i + 1;
yield i + 2;
yield i + 3;
}
function* generator(i) {
yield i;
yield* anotherGenerator(i);
yield i + 10;
}
const gen = generator(10);
console.log(gen.next().value); // 10
console.log(gen.next().value); // 11
console.log(gen.next().value); // 12
console.log(gen.next().value); // 13
console.log(gen.next().value); // 20
ã¸ã§ãã¬ã¼ã¿ã¼ã«å¼æ°ã渡ã
function* logGenerator() {
console.log(0);
console.log(1, yield);
console.log(2, yield);
console.log(3, yield);
}
const gen = logGenerator();
// æåã® next ã®å¼ã³åºãã§ã颿°ã®æåããã
// æåã® yield æã®åã¾ã§å®è¡ãããã
gen.next(); // 0
gen.next("pretzel"); // 1 pretzel
gen.next("california"); // 2 california
gen.next("mayonnaise"); // 3 mayonnaise
ã¸ã§ãã¬ã¼ã¿ã¼ã«ããã return æ
function* yieldAndReturn() {
yield "Y";
return "R";
yield "unreachable";
}
const gen = yieldAndReturn();
console.log(gen.next()); // { value: "Y", done: false }
console.log(gen.next()); // { value: "R", done: true }
console.log(gen.next()); // { value: undefined, done: true }
ãªãã¸ã§ã¯ãããããã£ã¨ãã¦ã®ã¸ã§ãã¬ã¼ã¿ã¼
const someObj = {
*generator() {
yield "a";
yield "b";
},
};
const gen = someObj.generator();
console.log(gen.next()); // { value: 'a', done: false }
console.log(gen.next()); // { value: 'b', done: false }
console.log(gen.next()); // { value: undefined, done: true }
ãªãã¸ã§ã¯ãã¡ã½ããã¨ãã¦ã®ã¸ã§ãã¬ã¼ã¿ã¼
class Foo {
*generator() {
yield 1;
yield 2;
yield 3;
}
}
const f = new Foo();
const gen = f.generator();
console.log(gen.next()); // { value: 1, done: false }
console.log(gen.next()); // { value: 2, done: false }
console.log(gen.next()); // { value: 3, done: false }
console.log(gen.next()); // { value: undefined, done: true }
è¨ç®ããããã£ã¨ãã¦ã®ã¸ã§ãã¬ã¼ã¿ã¼
class Foo {
*[Symbol.iterator]() {
yield 1;
yield 2;
}
}
const SomeObj = {
*[Symbol.iterator]() {
yield "a";
yield "b";
},
};
console.log(Array.from(new Foo())); // [ 1, 2 ]
console.log(Array.from(SomeObj)); // [ 'a', 'b' ]
ã¸ã§ãã¬ã¼ã¿ã¼ã¯ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ã¯ãªã
function* f() {}
const obj = new f(); // throws "TypeError: f is not a constructor
å¼ã§å®ç¾©ãããã¸ã§ãã¬ã¼ã¿ã¼
const foo = function* () {
yield 10;
yield 20;
};
const bar = foo();
console.log(bar.next()); // {value: 10, done: false}
ã¸ã§ãã¬ã¼ã¿ã¼ã®ä¾
function* powers(n) {
//endless loop to generate
for (let current = n; ; current *= n) {
yield current;
}
}
for (const power of powers(2)) {
// controlling generator
if (power > 32) {
break;
}
console.log(power);
// 2
// 4
// 8
// 16
// 32
}
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£æ
å ±
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4