ã¤ãã¬ã¼ã¿ã¼ã¨ã¸ã§ãã¬ã¼ã¿ã¼ã¯ãã³ã¢è¨èªã®å
é¨ã«å復å¦çãç´æ¥çã«åãå
¥ãããã¦ãããfor...of
ã«ã¼ãã®åä½ãç°¡åã«ã«ã¹ã¿ãã¤ãºã§ããä»çµã¿ãããããã¾ãã
詳細ã«ã¤ãã¦ã¯ãã¡ããã覧ãã ããã
ã¤ãã¬ã¼ã¿ã¼JavaScript ã§ã¯ãã¤ãã¬ã¼ã¿ã¼ã¯ã·ã¼ã±ã³ã¹ããã³æ½å¨çã«ã¯çµäºæã®è¿å¤ãå®ç¾©ãããªãã¸ã§ã¯ãã§ãã
ããå
·ä½çã«è¨ãã¨ãã¤ãã¬ã¼ã¿ã¼ã¯ã次㮠2 ã¤ã®ããããã£ãæã¤ãªãã¸ã§ã¯ããè¿ã next()
ã¡ã½ãããæã¤ãã¨ã«ãã£ã¦ã¤ãã¬ã¼ã¿ã¼ãããã³ã«ãå®è£
ãããªãã¸ã§ã¯ãã§ãã
value
å復ã·ã¼ã±ã³ã¹ã®æ¬¡ã®å¤
done
ã·ã¼ã±ã³ã¹ã®æå¾ã®å¤ãæ¢ã«æ¶è²»ããã¦ããå ´åã« true
ã¨ãªãã¾ããdone
ã¨ä¸¦ãã§ value
ãåå¨ããå ´åããããã¤ãã¬ã¼ã¿ã¼ã®è¿å¤ã¨ãªãã¾ãã
ã¤ãã¬ã¼ã¿ã¼ãªãã¸ã§ã¯ãã使ãããã¨ãnext()
ãç¹°ãè¿ãå¼ã³åºããã¨ã«ãã£ã¦ãæç¤ºçã«å復ãããã¨ãã§ãã¾ããã¤ãã¬ã¼ã¿ã¼ãå復ãããã¨ããã¤ãã¬ã¼ã¿ã¼ãæ¶è²»ããã¨è¨ãã¾ããä¸è¬çã« 1 åããå®è¡ã§ããªãããã§ããçµäºå¤ãè¿ãããå¾ãããã« next()
ãå¼ã³åºãã¦ããåã« {done: true}
ãè¿ãç¶ãã¾ãã
Javascript ã§æãä¸è¬çãªã¤ãã¬ã¼ã¿ã¼ã¯é åã¤ãã¬ã¼ã¿ã¼ã§ãé åã®åå¤ãé çªã«è¿ãã¾ãã
ãã¹ã¦ã®ã¤ãã¬ã¼ã¿ã¼ãé
åã¨ãã¦è¡¨ç¾ã§ããã¨ã¯æ³åããã®ã¯å®¹æã§ãããããã¯çå®ã§ã¯ããã¾ãããé
åã¯å®å
¨ã«å²ãå½ã¦ãªããã°ãªãã¾ããããã¤ãã¬ã¼ã¿ã¼ã¯å¿
è¦ãªã ãã§æ¶è²»ãããããã 0
ãã Infinity
ã¾ã§ã®æ´æ°ã®ç¯å²ãªã©ãç¡éã®ãµã¤ãºã®ã·ã¼ã±ã³ã¹ã表ç¾ã§ãã¾ãã
ããã§ã¯ããããè¡ããã¨ãã§ããä¾ã示ãã¾ããstart
ï¼å«ãï¼ãã end
ï¼å«ã¾ãªãï¼ã¾ã§ã®ä¸é£ã®æ´æ°ãå®ç¾©ããåç´ãªç¯å²ã®ã¤ãã¬ã¼ã¿ã¼ã®ä½æãå¯è½ã«ãã¾ããæçµçãªè¿å¤ã¯ã使ããã·ã¼ã±ã³ã¹ã®ãµã¤ãºããã夿° iterationCount
ã§è¿½è·¡ããã¾ãã
function makeRangeIterator(start = 0, end = Infinity, step = 1) {
let nextIndex = start;
let iterationCount = 0;
const rangeIterator = {
next() {
let result;
if (nextIndex < end) {
result = { value: nextIndex, done: false };
nextIndex += step;
iterationCount++;
return result;
}
return { value: iterationCount, done: true };
},
};
return rangeIterator;
}
ãã®ã¤ãã¬ã¼ã¿ã¼ã使ãã°ã次ã®ããã«ãªãã¾ã:
const iter = makeRangeIterator(1, 10, 2);
let result = iter.next();
while (!result.done) {
console.log(result.value); // 1 3 5 7 9
result = iter.next();
}
console.log("Iterated over sequence of size:", result.value); // [5 numbers returned, that took interval in between: 0 to 10]
ã¡ã¢: ç¹å®ã®ãªãã¸ã§ã¯ããã¤ãã¬ã¼ã¿ã¼ã§ãããã©ããã¯èãã¦ãç¥ããã¨ã¯ã§ãã¾ããããããå¿ è¦ãªå ´åã¯ãå復å¯è½ãªãã¸ã§ã¯ãã使ç¨ãã¦ãã ããã
ã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ã«ã¹ã¿ã ã¤ãã¬ã¼ã¿ã¼ã¯ä¾¿å©ãªãã¼ã«ã§ããããã®ä½æã«ã¯å
é¨ç¶æ
ãæç¤ºçã«ç¶æããå¿
è¦ããããããæ
éãªããã°ã©ãã³ã°ãå¿
è¦ã§ããã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ã¯å¼·åãªä»£æ¿ææ®µãæä¾ãã¾ããå®è¡ãé£ç¶ãã¦ããªãåä¸ã®é¢æ°ãè¨è¿°ãããã¨ã«ãã£ã¦å復ã¢ã«ã´ãªãºã ãå®ç¾©ã§ãã¾ããã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ã¯ãfunction*
æ§æã使ç¨ãã¦è¨è¿°ããã¾ãã
æåã«å¼ã³åºãããã¨ãã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ã¯ã³ã¼ããå®è¡ãããã¸ã§ãã¬ã¼ã¿ã¼ã¨å¼ã°ãããã種ã®ã¤ãã¬ã¼ã¿ã¼ãè¿ãã¾ããã¸ã§ãã¬ã¼ã¿ã¼ã® next
ã¡ã½ãããå¼ã³åºããã¨ã«ãã£ã¦å¤ãæ¶è²»ãããã¨ãã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ã¯ yield
ãã¼ã¯ã¼ããæ¤åºããã¾ã§å®è¡ãã¾ãã
ãã®é¢æ°ã¯ãå¿ è¦ãªåæ°ã ãå¼ã³åºããã¨ãã§ããæ¯åæ°ããã¸ã§ãã¬ã¼ã¿ã¼ãè¿ãã¾ãããåã¸ã§ãã¬ã¼ã¿ã¼ã¯ 1 åã®ã¿å復ãããã¨ãã§ãã¾ãã
ä¸ã®ä¾ã«é©ç¨ãã¦ã¿ã¾ãããããã®ã³ã¼ãã®åä½ã¯åãã§ãããå®è£ ã¯æ¸ãã®ãèªãã®ãã¯ããã«å®¹æã«ãªãã¾ãã
function* makeRangeIterator(start = 0, end = Infinity, step = 1) {
let iterationCount = 0;
for (let i = start; i < end; i += step) {
iterationCount++;
yield i;
}
return iterationCount;
}
å復å¯è½ãªãã¸ã§ã¯ã
ãªãã¸ã§ã¯ãã¯ã for...of
æ§æã§ã«ã¼ããããå¤ãªã©å復åä½ãå®ç¾©ããå ´åãå復å¯è½ã§ããArray
ã Map
ã®ãããªçµã¿è¾¼ã¿åã®ä¸ã«ã¯æ¢å®ã®å復åä½ãæã¤ãã®ãããã¾ãããä»ã®å (Object
ãªã©) ã¯æã£ã¦ãã¾ããã
å復å¯è½ã«ããã«ã¯ããªãã¸ã§ã¯ã㯠[Symbol.iterator]()
ã¡ã½ãããå®è£
ããå¿
è¦ãããã¾ããã¤ã¾ãããªãã¸ã§ã¯ã (ã¾ãã¯ãããã¿ã¤ããã§ã¼ã³ä¸ã®ãªãã¸ã§ã¯ãã®ãã¡ã® 1 ã¤) ã« Symbol.iterator
ãã¼ãæã¤ããããã£ãå¿
è¦ã§ã ã
å復å¯è½ãªãã¸ã§ã¯ã㯠1 åã ãã§ã 2 å以ä¸ã§ãå復ãããã¨ãã§ãã¾ããã©ã¡ããå½ã¦ã¯ã¾ããã¯ãããã°ã©ãã«ä»»ããã¦ãã¾ãã
ä¸åº¦ããå復ãããã¨ãã§ããªãå復å¯è½ãªãã¸ã§ã¯ã (ä¾ãã°ãã¸ã§ãã¬ã¼ã¿ã¼) ã¯ãé常 [Symbol.iterator]()
ã¡ã½ãããã this
ãè¿ãã¾ããä½åº¦ãç¹°ãè¿ãå¯è½ãªãã®ã¯ã [Symbol.iterator]()
ã®åå¼ã³åºãã§æ°ããã¤ãã¬ã¼ã¿ã¼ãè¿ãå¿
è¦ãããã¾ãã
function* makeIterator() {
yield 1;
yield 2;
}
const iter = makeIterator();
for (const itItem of iter) {
console.log(itItem);
}
console.log(iter[Symbol.iterator]() === iter); // true
// ãã®ä¾ã¯ãã¸ã§ãã¬ã¼ã¿ã¼ï¼ã¤ãã¬ã¼ã¿ã¼ï¼ãå復å¯è½ãªãã¸ã§ã¯ãã§ãããã¨ã示ãã¦ãã¾ãããã®ãªãã¸ã§ã¯ãã¯ã [Symbol.iterator]() ã¡ã½ããã`iter`ï¼èªåèªèº«ï¼ãè¿ãã¡ã½ãããä¿æãã¦ããããã®çµæããã®ãªãã¸ã§ã¯ãã¯ä¸åº¦ã ãå復å¦çãããã¨ãã§ãã¾ãã
// `iter` ã® [Symbol.iterator]() ã¡ã½ããããæ°ããã¤ãã¬ã¼ã¿ã¼/ã¸ã§ãã¬ã¼ã¿ã¼ãªãã¸ã§ã¯ããè¿ã颿°/ã¸ã§ãã¬ã¼ã¿ã¼ã«å¤æ´ããã¨ã `iter` ã¯ä½åº¦ãå復å¦çãããã¨ãã§ãã¾ãã
iter[Symbol.iterator] = function* () {
yield 2;
yield 1;
};
ã¦ã¼ã¶ã¼å®ç¾©ã®å復å¯è½ãªãã¸ã§ã¯ã
以ä¸ã®ããã«ãã¦å復å¯è½ãªãã¸ã§ã¯ããèªä½ãããã¨ãã§ãã¾ãã
const myIterable = {
*[Symbol.iterator]() {
yield 1;
yield 2;
yield 3;
},
};
ã¦ã¼ã¶ã¼å®ç¾©ã®å復å¯è½ãªãã¸ã§ã¯ãã¯ã for...of
ã«ã¼ããã¹ãã¬ããæ§æã§é常éã使ç¨ãããã¨ãã§ãã¾ãã
for (const value of myIterable) {
console.log(value);
}
// 1
// 2
// 3
[...myIterable]; // [1, 2, 3]
çµã¿è¾¼ã¿ã®å復å¯è½ãªãã¸ã§ã¯ã
String
ãArray
ãTypedArray
ãMap
ãSet
ã¯ãã¹ã¦çµã¿è¾¼ã¿å復å¯è½ãªãã¸ã§ã¯ãã§ãããããã®ãªãã¸ã§ã¯ãã¯ãã¹ã¦ããã®ãããã¿ã¤ããªãã¸ã§ã¯ãã« Symbol.iterator
ã¡ã½ãããåãã¦ããããã§ãã
for...of
ã«ã¼ããã¹ãã¬ããæ§æãyield*
ãæ§é åè§£ãªã©ã®æãå¼ã¯ãå復å¯è½ãªãã¸ã§ã¯ããå¿
è¦ã¨ãã¾ãã
for (const value of ["a", "b", "c"]) {
console.log(value);
}
// "a"
// "b"
// "c"
[..."abc"];
// ["a", "b", "c"]
function* gen() {
yield* ["a", "b", "c"];
}
gen().next();
// { value: "a", done: false }
[a, b, c] = new Set(["a", "b", "c"]);
a;
// "a"
é«åº¦ãªã¸ã§ãã¬ã¼ã¿ã¼
ã¸ã§ãã¬ã¼ã¿ã¼ã¯è¦æ±ã«å¿ã㦠yield
æã«ããçæãããå¤ãè¨ç®ãã¦ãããå¤ãã®è¨ç®ãå¿
è¦ãªä¸é£ã®ãã¼ã¿ãå¹ççã«è¡¨ç¾ããããååºã®ã¨ããç¡éã®ã·ã¼ã±ã³ã¹ã表ç¾ããããããã¨ãå¯è½ã«ãã¾ãã
ã¸ã§ãã¬ã¼ã¿ã¼ã®å
é¨ç¶æ
ã夿´ããã®ããã®å¤ã next()
ã¡ã½ããã§åãå
¥ãããã¨ãã§ãã¾ããnext()
ã«æ¸¡ãããå¤ã¯ yield
ãåãåãã¾ãã
ã¡ã¢: next()
ã®æåã®å¼ã³åºãã«æ¸¡ãããå¤ã¯å¸¸ã«ç¡è¦ããã¾ãã
以ä¸ã®ãã£ããããæ°åã¸ã§ãã¬ã¼ã¿ã¼ã§ã¯æ°åãåèµ·åããã®ã« next(x)
ã使ã£ã¦ãã¾ãã
function* fibonacci() {
let current = 0;
let next = 1;
while (true) {
const reset = yield current;
[current, next] = [next, next + current];
if (reset) {
current = 0;
next = 1;
}
}
}
const sequence = fibonacci();
console.log(sequence.next().value); // 0
console.log(sequence.next().value); // 1
console.log(sequence.next().value); // 1
console.log(sequence.next().value); // 2
console.log(sequence.next().value); // 3
console.log(sequence.next().value); // 5
console.log(sequence.next().value); // 8
console.log(sequence.next(true).value); // 0
console.log(sequence.next().value); // 1
console.log(sequence.next().value); // 1
console.log(sequence.next().value); // 2
ã¸ã§ãã¬ã¼ã¿ã¼ã® throw()
ã¡ã½ãããå¼ã³åºãã¦çºçãã¹ãä¾å¤å¤ã渡ããã¨ã§ãã¸ã§ãã¬ã¼ã¿ã¼ã«ä¾å¤ãå¼·å¶çã«çºçããããã¨ãã§ãã¾ããããã«ãããã¾ãã§åæ¢ä¸ã® yield
ã throw value
æã«æ¿ãã£ããã®ããã«ãã¸ã§ãã¬ã¼ã¿ã¼ã忢ããéã®ç¶æ³ã«å¿ãã¦ä¾å¤ãçºçãã¾ãã
ä¾å¤ãã¸ã§ãã¬ã¼ã¿ã¼å
é¨ã§ææãããªãå ´åã¯ãthrow()
ãéãã¦ãã®ä¾å¤ãå¼ã³åºãå
ã¸ã¨ä¼æãããã®å¾ next()
ãå¼ã³åºããçµæã® done
ããããã£ã¯ true
ã¨ãªãã¾ãã
ã¾ãã¸ã§ãã¬ã¼ã¿ã¼ã¯ãä¸ããããå¤ãè¿ãã¦ã¸ã§ãã¬ã¼ã¿ã¼èªèº«ã®å¦çãçµäºããã return()
ã¡ã½ãããæã£ã¦ãã¾ãã
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