Generator.prototype.return()
Baseline
åºãå©ç¨å¯è½
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2016å¹´9æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
return() 㯠Generator ã¤ã³ã¹ã¿ã³ã¹ã®ã¡ã½ããã§ãã¸ã§ãã¬ã¼ã¿ã¼ã®æ¬ä½å
ã§ãç¾å¨ã®åæ¢ä½ç½®ã« return æãæ¿å
¥ããããã®ããã«æ¯ãèããããã«ããã¸ã§ãã¬ã¼ã¿ã¼ãå®äºãã¾ããã¾ããtry...finally ãããã¯ã¨çµã¿åããããã¨ã§ãã¸ã§ãã¬ã¼ã¿ã¼ãã¯ãªã¼ã³ã¢ããå¦çãå®è¡ãããã¨ãã§ããããã«ãã¾ãã
æ§æ
generatorInstance.return()
generatorInstance.return(value)
弿°
valueçç¥å¯-
è¿å´ããå¤ã§ãã
è¿å¤
以ä¸ã® 2 ã¤ã®ããããã£ãæã£ã Object ã§ãã
done-
è«çå¤ã§ãã
- ãã®ã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ã®å¶å¾¡ããã¼ãæ«å°¾ã«éãã¦ããå ´åã
trueã«ãªãã¾ãã - ãã®ã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ã®å¶å¾¡ããã¼ãæ«å°¾ã«éãã¦ããããããã«å¤ãçæã§ããå ´åã
falseã«ãªãã¾ããããã¯ãreturnãtry...finallyã§ææããããã¤finallyãããã¯å ã«ããã«yieldå¼ãåå¨ããå ´åã«ã®ã¿çºçãã¾ãã
- ãã®ã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ã®å¶å¾¡ããã¼ãæ«å°¾ã«éãã¦ããå ´åã
value-
弿°ã¨ãã¦æå®ãããå¤ãã¾ãã¯
yieldå¼ãtry...finallyã§å²ã¾ãã¦ããå ´åãfinallyãããã¯ãã yield/return ã§è¿ãããå¤ã
ä¾å¤
TypeError-
ã¸ã§ãã¬ã¼ã¿ã¼ãæ¢ã«å®è¡ä¸ã§ããå ´åã«çºçãã¾ãã
解説
return() ã¡ã½ãããå¼ã³åºãããã¨ãã¸ã§ãã¬ã¼ã¿ã¼ã®æ¬ä½å
ã§ç¾å¨ä¸æãããä½ç½®ã« return value; æãæ¿å
¥ããããã®ããã«è¦ãªããã¾ããããã§ value 㯠return() ã¡ã½ããã«æ¸¡ãããå¤ã§ãããããã£ã¦ãé常ã®ããã¼ã§ã¯ãreturn(value) ãå¼ã³åºã㨠{ done: true, value: value } ãè¿ããã¾ãããã ããyield å¼ã try...finally ãããã¯ã§å²ã¾ãã¦ããå ´åãå¶å¾¡ããã¼ã¯é¢æ°æ¬ä½ããæããã代ããã« finally ãããã¯ã«é²ã¿ã¾ãããã®å ´åãè¿ãããå¤ã¯ç°ãªãå¯è½æ§ããããfinally ãããã¯å
ã«ããã« yield å¼ãããå ´åãdone ã false ã«ãªããã¨ãããã¾ãã
ä¾
>return() ã®ä½¿ç¨
次ã®ä¾ã§ã¯ç°¡åãªã¸ã§ãã¬ã¼ã¿ã¼ã¨ return ã¡ã½ããã示ãã¾ãã
function* gen() {
yield 1;
yield 2;
yield 3;
}
const g = gen();
g.next(); // { value: 1, done: false }
g.return("foo"); // { value: "foo", done: true }
g.next(); // { value: undefined, done: true }
return(value) ããã§ã« "å®äº" ã®ç¶æ
ã®ã¸ã§ãã¬ã¼ã¿ã¼ã§å¼ã³åºãããã¨ãã¸ã§ãã¬ã¼ã¿ã¼ã¯ "å®äº" ã®ç¶æ
ã®ã¾ã¾ã«ãªãã¾ãã
弿°ãæä¾ãããªãã£ãå ´åãè¿å´ããããªãã¸ã§ã¯ãã® value ããããã£ã¯ .next() ã®å ´åã¨åãã«ãªãã¾ãã弿°ãæä¾ãããå ´åã¯ãè¿å´ããããªãã¸ã§ã¯ãã® value ããããã£ã®å¤ã«è¨å®ããã¾ãã
function* gen() {
yield 1;
yield 2;
yield 3;
}
const g = gen();
g.next(); // { value: 1, done: false }
g.next(); // { value: 2, done: false }
g.next(); // { value: 3, done: false }
g.next(); // { value: undefined, done: true }
g.return(); // { value: undefined, done: true }
g.return(1); // { value: 1, done: true }
return() 㨠try...finally
return ã¡ã½ãããå¼ã³åºãããäºå®ã¯ãyield å¼ã try...finally ãããã¯ã§å²ã¾ãã¦ããå ´åã«ã®ã¿ãã¸ã§ãã¬ã¼ã¿ã¼èªèº«ã§èªèã§ãã¾ãã
return ã¡ã½ããã try ãããã¯å
ã§ä¸æåæ¢ãããã¸ã§ãã¬ã¼ã¿ã¼ã«å¯¾ãã¦å¼ã³åºãããã¨ãã¸ã§ãã¬ã¼ã¿ã¼å
ã®å®è¡ã¯ finally ãããã¯ã«é²ã¿ã¾ããããã¯ãtry...finally æã§ã¯ finally ãããã¯ã常ã«å®è¡ãããããã§ãã
function* gen() {
yield 1;
try {
yield 2;
yield 3;
} finally {
yield "cleanup";
}
}
const g1 = gen();
g1.next(); // { value: 1, done: false }
// å®è¡ã try...finally ã®åã§ä¸æåæ¢
g1.return("early return"); // { value: 'early return', done: true }
const g2 = gen();
g2.next(); // { value: 1, done: false }
g2.next(); // { value: 2, done: false }
// å®è¡ã try...finally ã®ä¸ã§ä¸æåæ¢
g2.return("early return"); // { value: 'cleanup', done: false }
// å®äºå¤ã¯ä¿æããã
g2.next(); // { value: 'early return', done: true }
// ã¸ã§ãã¬ã¼ã¿ã¼ã¯å®äºç¶æ
g2.return("not so early return"); // { value: 'not so early return', done: true }
finally ãããã¯ã®è¿å¤ã¯ãreturn å¼ã³åºãããè¿ãããçµæã® value ã«ããªãã¾ãã
function* gen() {
try {
yield 1;
} finally {
return "cleanup";
}
}
const generator = gen();
generator.next(); // { value: 1, done: false }
generator.return("early return"); // { value: 'cleanup', done: true }
仿§æ¸
| 仿§æ¸ |
|---|
| ECMAScript® 2027 Language Specification > # sec-generator.prototype.return > |