aboutsummaryrefslogtreecommitdiff
path: root/files/ja/web/javascript/reference/global_objects/generator
diff options
context:
space:
mode:
authorPeter Bengtsson <mail@peterbe.com>2020-12-08 14:40:17 -0500
committerPeter Bengtsson <mail@peterbe.com>2020-12-08 14:40:17 -0500
commit33058f2b292b3a581333bdfb21b8f671898c5060 (patch)
tree51c3e392513ec574331b2d3f85c394445ea803c6 /files/ja/web/javascript/reference/global_objects/generator
parent8b66d724f7caf0157093fb09cfec8fbd0c6ad50a (diff)
downloadtranslated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.gz
translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.bz2
translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.zip
initial commit
Diffstat (limited to 'files/ja/web/javascript/reference/global_objects/generator')
-rw-r--r--files/ja/web/javascript/reference/global_objects/generator/index.html86
-rw-r--r--files/ja/web/javascript/reference/global_objects/generator/next/index.html137
-rw-r--r--files/ja/web/javascript/reference/global_objects/generator/return/index.html97
-rw-r--r--files/ja/web/javascript/reference/global_objects/generator/throw/index.html95
4 files changed, 415 insertions, 0 deletions
diff --git a/files/ja/web/javascript/reference/global_objects/generator/index.html b/files/ja/web/javascript/reference/global_objects/generator/index.html
new file mode 100644
index 0000000000..3a182f7fa3
--- /dev/null
+++ b/files/ja/web/javascript/reference/global_objects/generator/index.html
@@ -0,0 +1,86 @@
+---
+title: Generator
+slug: Web/JavaScript/Reference/Global_Objects/Generator
+tags:
+ - Class
+ - ECMAScript 2015
+ - Generator
+ - JavaScript
+ - Legacy Generator
+ - Legacy Iterator
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Generator
+---
+<div>{{JSRef}}</div>
+
+<p><code><strong>Generator</strong></code> オブジェクトは{{JSxRef("Statements/function*", "ジェネレーター関数", "", 1)}}によって返され、<a href="/ja/docs/Web/JavaScript/Reference/Iteration_protocols#The_iterable_protocol">反復可能プロトコル</a>と<a href="/ja/docs/Web/JavaScript/Reference/Iteration_protocols#The_iterator_protocol">反復子プロトコル</a>の両方に準拠しています。</p>
+
+<h2 id="Constructor" name="Constructor">コンストラクター</h2>
+
+<p>このオブジェクトを直接インスタンス化することはできません。代わりに、<a href="/ja/docs/Web/JavaScript/Reference/Statements/function*">ジェネレーター関数</a>から <code>Generator</code> のインスタンスを返すことができます。</p>
+
+<pre class="syntaxbox notranslate">function* generator() {
+ yield 1;
+ yield 2;
+ yield 3;
+}
+
+const gen = generator(); // "Generator { }"</pre>
+
+<h2 id="Instance_methods" name="Instance_methods">インスタンスメソッド</h2>
+
+<dl>
+ <dt>{{JSxRef("Generator.prototype.next()")}}</dt>
+ <dd>{{JSxRef("Operators/yield", "yield")}} 式で得られた値を返します。</dd>
+ <dt>{{JSxRef("Generator.prototype.return()")}}</dt>
+ <dd>与えられた値を返し、ジェネレーターを終了します。</dd>
+ <dt>{{JSxRef("Generator.prototype.throw()")}}</dt>
+ <dd>ジェネレーターにエラーを投げます。(そのジェネレーターの中からキャッチされない限り、ジェネレーターも終了します)</dd>
+</dl>
+
+<h2 id="Examples" name="Examples">例</h2>
+
+<h3 id="An_infinite_iterator" name="An_infinite_iterator">無限イテレーター</h3>
+
+<pre class="brush: js; notranslate">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
+// ...</pre>
+
+<h2 id="Specifications" name="Specifications">仕様</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">仕様書</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-generator-objects', 'Generator objects')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザー実装状況</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Generator")}}</p>
+
+<h2 id="See_also" name="See_also">関連情報</h2>
+
+<ul>
+ <li>{{JSxRef("Statements/function*", "function*")}}</li>
+ <li>{{JSxRef("Operators/function*", '<code>function*</code> 式', "", 1)}}</li>
+ <li>{{JSxRef("GeneratorFunction")}}</li>
+ <li><a href="/ja/docs/Web/JavaScript/Guide/The_Iterator_protocol">反復処理プロトコル </a></li>
+</ul>
diff --git a/files/ja/web/javascript/reference/global_objects/generator/next/index.html b/files/ja/web/javascript/reference/global_objects/generator/next/index.html
new file mode 100644
index 0000000000..f94c013421
--- /dev/null
+++ b/files/ja/web/javascript/reference/global_objects/generator/next/index.html
@@ -0,0 +1,137 @@
+---
+title: Generator.prototype.next()
+slug: Web/JavaScript/Reference/Global_Objects/Generator/next
+tags:
+ - ECMAScript 2015
+ - Generator
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Generator/next
+---
+<div>{{JSRef}}</div>
+
+<p><span class="seoSummary"><strong><code>next()</code></strong> メソッドは、2つのプロパティ <code>done</code> と <code>value</code> を持つオブジェクトを返します。 <code>next</code> メソッドに引数を提供して、ジェネレーターへ値を送ることもできます。</span></p>
+
+<h2 id="Syntax" name="Syntax">構文</h2>
+
+<pre class="syntaxbox notranslate"><code><var>gen</var>.next(<var>value</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">引数</h3>
+
+<dl>
+ <dt><code><var>value</var></code></dt>
+ <dd>ジェネレーターへ送る値です。</dd>
+ <dd>この値は <code>yield</code> 式の結果として代入されます。例えば <code><var>variable</var> = yield <var>expression</var></code> の場合、 <code>.next()</code> 関数に渡された値は <code><var>variable</var></code> に代入されます。</dd>
+</dl>
+
+<h3 id="Return_value" name="Return_value">返値</h3>
+
+<p>以下の2つのプロパティを持った {{jsxref("Object")}} です。</p>
+
+<dl>
+ <dt><code>done</code> (boolean)</dt>
+ <dd>イテレーターが反復処理の末尾を過ぎている場合、値は <code>true</code> になります。この場合、 <code>value</code> はオプションでそのイテレーターの<em>返値</em>を指定します。</dd>
+ <dd>イテレーターが反復処理の次の値を生成することができた場合、値は <code>false</code> になります。これは <code>done</code> プロパティを指定しない場合も同等です。</dd>
+ <dt><code>value</code></dt>
+ <dd>イテレーターが返す何らかの JavaScript の値です。 <code>done</code> が <code>true</code> の場合は省略可能です。</dd>
+</dl>
+
+<h2 id="Examples" name="Examples">例</h2>
+
+<h3 id="Using_test" name="Using_test">next() の使用</h3>
+
+<p>次の例では、 <code>next</code> メソッドが返す簡単なジェネレーターとオブジェクトを示します。</p>
+
+<pre class="brush: js notranslate">function* gen() {
+ yield 1;
+ yield 2;
+ yield 3;
+}
+
+const g = gen(); // "Generator { }"
+g.next(); // "Object { value: 1, done: false }"
+g.next(); // "Object { value: 2, done: false }"
+g.next(); // "Object { value: 3, done: false }"
+g.next(); // "Object { value: undefined, done: true }"
+</pre>
+
+<h3 id="Using_next_with_a_list" name="Using_next_with_a_list">リストでの next() の使用</h3>
+
+<pre class="notranslate">function* getPage(pageSize = 1, list) {
+ let output = [];
+ let index = 0;
+
+ while (index &lt; list.length) {
+ output = [];
+ for (let i = index; i &lt; index + pageSize; i++) {
+ if (list[i]) {
+ output.push(list[i]);
+ }
+ }
+
+ yield output;
+ index += pageSize;
+ }
+}
+
+list = [1, 2, 3, 4, 5, 6, 7, 8]
+var page = getPage(3, list); // Generator { }
+
+page.next(); // Object {value: (3) [1, 2, 3], done: false}
+page.next(); // Object {value: (3) [4, 5, 6], done: false}
+page.next(); // Object {value: (2) [7, 8], done: false}
+page.next(); // Object {value: undefined, done: true}
+</pre>
+
+<h3 id="Sending_values_to_the_generator" name="Sending_values_to_the_generator">ジェネレーターへ値を送る</h3>
+
+<p>この例では <code>next</code> を値付きで呼び出しています。</p>
+
+<p>なお、最初の呼び出しではジェネレーターが何も生成していないため、何もログを記録しないことに注意してください。</p>
+
+<pre class="brush: js notranslate">function* gen() {
+ while (true) {
+ let value = yield null;
+ console.log(value);
+ }
+}
+
+const g = gen();
+g.next(1);
+// "{ value: null, done: false }"
+g.next(2);
+// 2
+// "{ value: null, done: false }"
+</pre>
+
+<h2 id="Specifications" name="Specifications">仕様書</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">仕様書</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-generator.prototype.next', 'Generator.prototype.next')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2>
+
+<div>
+<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div>
+
+<p>{{Compat("javascript.builtins.Generator.next")}}</p>
+</div>
+
+<h2 id="See_also" name="See_also">関連情報</h2>
+
+<ul>
+ <li>{{jsxref("Statements/function*", "function*")}}</li>
+ <li><a href="/ja/docs/Web/JavaScript/Guide/Iterators_and_Generators">イテレーターとジェネレーター</a></li>
+</ul>
diff --git a/files/ja/web/javascript/reference/global_objects/generator/return/index.html b/files/ja/web/javascript/reference/global_objects/generator/return/index.html
new file mode 100644
index 0000000000..2086277b7a
--- /dev/null
+++ b/files/ja/web/javascript/reference/global_objects/generator/return/index.html
@@ -0,0 +1,97 @@
+---
+title: Generator.prototype.return()
+slug: Web/JavaScript/Reference/Global_Objects/Generator/return
+tags:
+ - ECMAScript 2015
+ - Generator
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Generator/return
+---
+<div>{{JSRef}}</div>
+
+<p><strong><code>return()</code></strong> メソッドは、指定された値を返してジェネレーターを終了します。</p>
+
+<h2 id="Syntax" name="Syntax">構文</h2>
+
+<pre class="syntaxbox notranslate"><var>gen</var>.return(<var>value</var>)</pre>
+
+<h3 id="Parameters" name="Parameters">引数</h3>
+
+<dl>
+ <dt><code><var>value</var></code></dt>
+ <dd>返却する値です。</dd>
+</dl>
+
+<h3 id="Return_value" name="Return_value">返値</h3>
+
+<p>この関数に引数として与えられている値を返します。</p>
+
+<h2 id="Examples" name="Examples">例</h2>
+
+<h3 id="Using_return" name="Using_return">return() の使用</h3>
+
+<p>次の例では簡単なジェネレーターと <code>return</code> メソッドを示します。</p>
+
+<pre class="brush: js notranslate">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 }
+</pre>
+
+<p><code>return(<var>value</var>)</code> がすでに "完了" の状態のジェネレーターで呼び出されると、ジェネレーターは "完了" の状態のままになります。</p>
+
+<p>引数が提供されなかった場合、返却されるオブジェクトの <code>value</code> プロパティは <code>.next()</code> の場合と同じになります。引数が提供された場合は、返却されるオブジェクトの <code>value</code> プロパティの値に設定されます。</p>
+
+<pre class="brush: js notranslate">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 }
+</pre>
+
+<h2 id="Specifications" name="Specifications">仕様書</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">仕様書</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-generator.prototype.return', 'Generator.prototype.return')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2>
+
+<div>
+<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div>
+
+<p>{{Compat("javascript.builtins.Generator.return")}}</p>
+</div>
+
+<h2 id="See_also" name="See_also">関連情報</h2>
+
+<ul>
+ <li>{{jsxref("Statements/function*", "function*")}}</li>
+</ul>
diff --git a/files/ja/web/javascript/reference/global_objects/generator/throw/index.html b/files/ja/web/javascript/reference/global_objects/generator/throw/index.html
new file mode 100644
index 0000000000..9c00115cee
--- /dev/null
+++ b/files/ja/web/javascript/reference/global_objects/generator/throw/index.html
@@ -0,0 +1,95 @@
+---
+title: Generator.prototype.throw()
+slug: Web/JavaScript/Reference/Global_Objects/Generator/throw
+tags:
+ - ECMAScript 2015
+ - Generator
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Generator/throw
+---
+<div>{{JSRef}}</div>
+
+<p><span class="seoSummary"><strong><code>throw()</code></strong> メソッドは、ジェネレーターの例外を、エラーを発生させることで再開し、 <code>done</code> と <code>value</code> の2つのプロパティを持ったオブジェクトを返します。</span></p>
+
+<h2 id="Syntax" name="Syntax">構文</h2>
+
+<pre class="syntaxbox notranslate"><code><var>gen</var>.throw(<var>exception</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">引数</h3>
+
+<dl>
+ <dt><code><var>exception</var></code></dt>
+ <dd>発生させる例外。デバッグ時には <code>instanceof</code> {{jsxref("Error")}} を行うと便利です。</dd>
+</dl>
+
+<h3 id="Return_value" name="Return_value">返値</h3>
+
+<p>2つのプロパティを持つ {{jsxref("Global_Objects/Object", "Object")}} です。</p>
+
+<dl>
+ <dt><code>done</code> (boolean)</dt>
+ <dd>
+ <ul>
+ <li>イテレーターが反復処理の末尾を過ぎている場合、値は <code>true</code> になります。この場合、 <code>value</code> はオプションでそのイテレーターの<em>返値</em>を指定します。</li>
+ <li>イテレーターが反復処理の次の値を生成することができた場合、値は <code>false</code> になります。これは <code>done</code> プロパティを指定しない場合も同等です。</li>
+ </ul>
+ </dd>
+ <dt><code>value</code></dt>
+ <dd>イテレーターが返す何らかの JavaScript の値です。 <code>done</code> が <code>true</code> の場合は省略可能です。</dd>
+</dl>
+
+<h2 id="Examples" name="Examples">例</h2>
+
+<h3 id="Using_throw" name="Using_throw">throw() の使用</h3>
+
+<p>次の例では、簡単なジェネレーターと、 <code>throw</code>メソッドを用いて発生させるエラーを示します。エラーは通常 {{jsxref("Statements/try...catch", "try...catch")}} ブロックによって受け取られます。</p>
+
+<pre class="brush: js notranslate">function* gen() {
+ while(true) {
+ try {
+ yield 42;
+ } catch(e) {
+ console.log('Error caught!');
+ }
+ }
+}
+
+const g = gen();
+g.next();
+// { value: 42, done: false }
+g.throw(new Error('Something went wrong'));
+// "Error caught!"
+// { value: 42, done: false }
+</pre>
+
+<h2 id="Specifications" name="Specifications">仕様書</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">仕様書</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-generator.prototype.throw', 'Generator.prototype.throw')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2>
+
+<div>
+<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div>
+
+<p>{{Compat("javascript.builtins.Generator.throw")}}</p>
+</div>
+
+<h2 id="See_also" name="See_also">関連情報</h2>
+
+<ul>
+ <li>{{jsxref("Statements/function*", "function*")}}</li>
+</ul>