From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../reference/operators/yield/index.html | 106 +++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 files/ja/web/javascript/reference/operators/yield/index.html (limited to 'files/ja/web/javascript/reference/operators/yield') diff --git a/files/ja/web/javascript/reference/operators/yield/index.html b/files/ja/web/javascript/reference/operators/yield/index.html new file mode 100644 index 0000000000..2cadddab3b --- /dev/null +++ b/files/ja/web/javascript/reference/operators/yield/index.html @@ -0,0 +1,106 @@ +--- +title: yield +slug: Web/JavaScript/Reference/Operators/yield +tags: + - ECMAScript 2015 + - Generators + - Iterator + - JavaScript + - Language feature + - Operator + - ジェネレーター + - 反復処理 + - 演算子 + - 言語機能 +translation_of: Web/JavaScript/Reference/Operators/yield +--- +
{{jsSidebar("Operators")}}
+ +

yield キーワードは、ジェネレーター関数 ({{jsxref("Statements/function*", "function*")}} または古いジェネレーター関数) のを一時停止したり再開したりするために使用します。

+ +
{{EmbedInteractiveExample("pages/js/expressions-yield.html", "taller")}}
+ + + +

構文

+ +
[rv] = yield [expression]
+ +
+
expression {{optional_inline}}
+
iterator プロトコル経由でジェネレーター関数が返す値を定義します。省略した場合、代わりに undefined が返されます。
+
rv {{optional_inline}}
+
+

ジェネレーターの実行を再開する next() メソッドに渡したオプションの値を受け取ります。

+
+
+ +

解説

+ +

yield キーワードは、ジェネレーター関数の実行を一時停止し、ジェネレーターの呼び出し元に yield キーワードに続く値を戻します。これは、 return キーワードのジェネレーター版と考えることができます。

+ +

yield はそれを含むジェネレーター関数の中で直接しか呼び出すことしかできません。呼び出し先の関数やコールバックから呼び出すことはできません。

+ +

yield キーワードはジェネレーターの next() メソッドを呼び出させ、 valuedone の2つのプロパティを持つ IteratorResult オブジェクトを返します。 value プロパティは yield 式の評価結果であり、 donefalse、すなわちジェネレーター関数が完全には完了していないことを示します。

+ +

yield 式によって実行が停止されると、ジェネレーターの next() メソッドが呼び出されるまで、ジェネレーターのコード実行は一時停止します。ジェネレーターの next() メソッドが呼ばれるたびに、ジェネレーターの実行が再開され、次のうちのいずれかに達するまで実行されます。

+ + + +

ジェネレーターの next() メソッドにオプションの値が渡された場合、その値はジェネレーターの現在の yield 操作の返値となります。

+ +

ジェネレーターのコードパス、 yield 演算子、新しい開始値を {{jsxref("Generator.prototype.next()")}} に渡すことで指定することができる機能により、ジェネレーターは大きな力と制御を提供します。

+ +

+ +

次のコードはジェネレーター関数の定義例です。

+ +
function* countAppleSales () {
+  let saleList = [3, 7, 5]
+  for (let i = 0; i < saleList.length; i++) {
+    yield saleList[i]
+  }
+}
+ +

ジェネレーター関数が定義されると、ご覧のようにイテレーターを構築するために使用されます。

+ +
let appleStore = countAppleSales()  // Generator { }
+console.log(appleStore.next())      // { value: 3, done: false }
+console.log(appleStore.next())      // { value: 7, done: false }
+console.log(appleStore.next())      // { value: 5, done: false }
+console.log(appleStore.next())      // { value: undefined, done: true }
+ +

仕様書

+ + + + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#prod-YieldExpression', 'Yield')}}
+ +

ブラウザーの互換性

+ + + +

{{Compat("javascript.operators.yield")}}

+ +

関連情報

+ + -- cgit v1.2.3-54-g00ecf