diff options
author | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:40:17 -0500 |
---|---|---|
committer | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:40:17 -0500 |
commit | 33058f2b292b3a581333bdfb21b8f671898c5060 (patch) | |
tree | 51c3e392513ec574331b2d3f85c394445ea803c6 /files/ja/web/javascript/reference/global_objects/generator | |
parent | 8b66d724f7caf0157093fb09cfec8fbd0c6ad50a (diff) | |
download | translated-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')
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 < list.length) { + output = []; + for (let i = index; i < 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> |