diff options
Diffstat (limited to 'files/ja/web/javascript/reference/operators')
3 files changed, 0 insertions, 446 deletions
diff --git a/files/ja/web/javascript/reference/operators/array_comprehensions/index.html b/files/ja/web/javascript/reference/operators/array_comprehensions/index.html deleted file mode 100644 index 814bdd9eb7..0000000000 --- a/files/ja/web/javascript/reference/operators/array_comprehensions/index.html +++ /dev/null @@ -1,198 +0,0 @@ ---- -title: 配列内包表記 -slug: Web/JavaScript/Reference/Operators/Array_comprehensions -tags: - - JavaScript - - Non-standard - - Operator - - Reference -translation_of: Archive/Web/JavaScript/Array_comprehensions ---- -<div class="warning"><strong>非標準。使用しないでください!</strong><br> -配列内包は非標準であり、Firefox 58 から削除されています。将来向きの用途には、{{jsxref("Array.prototype.map")}}、{{jsxref("Array.prototype.filter")}}、{{jsxref("Functions/Arrow_functions", "アロー関数", "", 1)}}、{{jsxref("Operators/Spread_operator", "スプレッド構文", "", 1)}} の使用を検討してください。</div> - -<div>{{jsSidebar("Operators")}}</div> - -<p><strong>array comprehension</strong> 構文は、既存のものに基づいている新しい配列をすばやく組み立てることができるJavaScriptの式でした。しかし、これは標準仕様や Firefox の実装から削除されました。使用しないでください!</p> - -<h2 id="構文">構文</h2> - -<pre class="syntaxbox">[for (x of iterable) x] -[for (x of iterable) if (condition) x] -[for (x of iterable) for (y of iterable) x + y] -</pre> - -<h2 id="説明">説明</h2> - -<p>配列の内包表記内で、下記の二種類のコンポーネントが許されています。:</p> - -<ul> - <li>{{jsxref("Statements/for...of", "for...of")}}</li> - <li>{{jsxref("Statements/if...else", "if")}}</li> -</ul> - -<p>for-of イテレーションは常に最初のコンポーネントです。複数のfor-of イテレーションは、ステートメントが許可されている場合。</p> - -<p>配列内包は以前、ECMAScript 2016 で標準化を提案されていました。これは別のものに基づいて新たな配列を構成するための手っ取り早い方法を提供します。配列内包は一般に、{{jsxref("Array.prototype.map", "map()")}} および {{jsxref("Array.prototype.filter", "filter()")}} を呼び出す代わりとして、あるいはそれら 2 つを結合する手段として用いることができます。</p> - -<p>次の配列内包は数値の配列を取り込んで、その各数値を 2 倍した値による新しい配列を作成します。</p> - -<pre class="brush: js">var numbers = [1, 2, 3, 4]; -var doubled = [for (i of numbers) i * 2]; -console.log(doubled); // logs 2,4,6,8 -</pre> - -<p>これは以下の {{jsxref("Array.prototype.map", "map()")}} による操作と同等です:</p> - -<pre class="brush: js">var doubled = numbers.map(i => i * 2); -</pre> - -<p>配列内包は、特定の式にマッチするアイテムの選択に用いることもできます。以下は、偶数だけを選択する内包です:</p> - -<pre class="brush: js">var numbers = [1, 2, 3, 21, 22, 30]; -var evens = [for (i of numbers) if (i % 2 === 0) i]; -console.log(evens); // logs 2,22,30 -</pre> - -<p>同じ目的で {{jsxref("Array.prototype.filter", "filter()")}} を用いることができます:</p> - -<pre class="brush: js">var evens = numbers.filter(i => i % 2 === 0); -</pre> - -<p>{{jsxref("Array.prototype.map", "map()")}} および {{jsxref("Array.prototype.filter", "filter()")}} 方式の操作を、ひとつの配列内包に統合することができます。以下は偶数だけをフィルタリングして、それらを 2 倍した値を含む配列を作成します:</p> - -<pre class="brush: js">var numbers = [1, 2, 3, 21, 22, 30]; -var doubledEvens = [for (i of numbers) if (i % 2 === 0) i * 2]; -console.log(doubledEvens); // logs 4,44,60 -</pre> - -<p>配列内包の角括弧は、スコープ目的の暗黙的なブロックをもたらします。新しい変数 (上記の例における i ) は、{{jsxref("Statements/let","let")}} を用いて宣言されたかのように扱われます。つまり、それらの変数は配列内包の外部で使用できません。</p> - -<p>配列内包の入力自体は、配列である必要はありません。<a href="/ja/docs/Web/JavaScript/Guide/Iterators_and_Generators" title="JavaScript/Guide/Iterators and Generators">イテレータおよびジェネレータ</a> も使用できます。</p> - -<p>文字列を入力とすることもできます。(配列状のオブジェクトにおいて) 前出の filter や map の動作を実現するには以下のようにします:</p> - -<pre class="brush: js">var str = 'abcdef'; -var consonantsOnlyStr = [for (c of str) if (!(/[aeiouAEIOU]/).test(c)) c].join(''); // 'bcdf' -var interpolatedZeros = [for (c of str) c + '0' ].join(''); // 'a0b0c0d0e0f0' -</pre> - -<p>繰り返しになりますが入力データの形式は維持されませんので、文字列へ戻すために {{jsxref("Array.prototype.join", "join()")}} を使用しなければなりません。</p> - -<h2 id="例">例</h2> - -<h3 id="簡単な配列の内包表記">簡単な配列の内包表記</h3> - -<pre class="brush:js">[for (i of [ 1, 2, 3 ]) i*i ]; -// [ 1, 4, 9 ] - -var abc = [ "A", "B", "C" ]; -[for (letters of abc) letters.toLowerCase()]; -// [ "a", "b", "c" ]</pre> - -<h3 id="if文で配列の内包表記">if文で配列の内包表記</h3> - -<pre class="brush: js">var years = [ 1954, 1974, 1990, 2006, 2010, 2014 ]; -[for (year of years) if (year > 2000) year]; -// [ 2006, 2010, 2014 ] -[for (year of years) if (year > 2000) if(year < 2010) year]; -// [ 2006], the same as below: -[for (year of years) if (year > 2000 && year < 2010) year]; -// [ 2006] -</pre> - -<h3 id="mapとfilterを比較する配列の内包表記"><code>map</code>と<code>filter</code>を比較する配列の内包表記</h3> - -<p>配列の内包表記構文を理解する簡単な方法は、Array {{jsxref("Array.map", "map")}}や{{jsxref("Array.filter", "filter")}}メソッドと比較することです。:</p> - -<pre class="brush: js">var numbers = [ 1, 2, 3 ]; - -numbers.map(function (i) { return i * i }); -numbers.map(i => i*i); -[for (i of numbers) i*i ]; -// all are [ 1, 4, 9 ] - -numbers.filter(function (i) { return i < 3 }); -numbers.filter(i => i < 3); -[for (i of numbers) if (i < 3) i]; -// all are [ 1, 2 ] -</pre> - -<h3 id="二つの配列の内包表記">二つの配列の内包表記</h3> - -<p>二つの配列で動作させるために二つのfor-ofイテレーションを使用する:</p> - -<pre class="brush: js">var numbers = [ 1, 2, 3 ]; -var letters = [ "a", "b", "c" ]; - -var cross = [for (i of numbers) for (j of letters) i+j]; -// [ "1a", "1b", "1c", "2a", "2b", "2c", "3a", "3b", "3c" ] - -var grid = [for (i of numbers) [for (j of letters) i+j]]; -// [ -// ["1a", "1b", "1c"], -// ["2a", "2b", "2c"], -// ["3a", "3b", "3c"] -// ] - -[for (i of numbers) if (i > 1) for (j of letters) if(j > "a") i+j] -// ["2b", "2c", "3b", "3c"], the same as below: - -[for (i of numbers) for (j of letters) if (i > 1) if(j > "a") i+j] -// ["2b", "2c", "3b", "3c"] - -[for (i of numbers) if (i > 1) [for (j of letters) if(j > "a") i+j]] -// [["2b", "2c"], ["3b", "3c"]], not the same as below: - -[for (i of numbers) [for (j of letters) if (i > 1) if(j > "a") i+j]] -// [[], ["2b", "2c"], ["3b", "3c"]] -</pre> - -<h2 id="Specifications" name="Specifications">仕様</h2> - -<p>最初は ECMAScript 2015 のドラフトでしたが、リビジョン 27 (2014 年 8 月) で取り除かれました。仕様セマンティクスのために ES2015 の古いリビジョンを参照してください。</p> - -<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザー実装状況</h2> - - - -<p>{{Compat("javascript.operators.array_comprehensions")}}</p> - -<h2 id="Differences_to_the_older_JS1.7JS1.8_comprehensions" name="Differences_to_the_older_JS1.7JS1.8_comprehensions">古い JS1.7/JS1.8 の内包表記との違い</h2> - -<div class="warning">JS1.7/JS1.8 の内包表記は、バージョン 46 で Gecko から削除しました ({{bug(1220564)}})。</div> - -<p><strong>古い内包表記の構文 (使用しないでください!):</strong></p> - -<pre class="brush: js example-bad">[X for (Y in Z)] -[X for each (Y in Z)] -[X for (Y of Z)] -</pre> - -<p>違い:</p> - -<ul> - <li>ESNext の内包表記は全体の内包表記のかわりに"for"ノードごとに1スコープを生成します。 - <ul> - <li>旧: <code>[()=>x for (x of [0, 1, 2])][1]() // 2</code></li> - <li>新: <code>[for (x of [0, 1, 2]) ()=>x][1]() // 1, each iteration creates a fresh binding for x. </code></li> - </ul> - </li> - <li>ESNext の内包表記は代入式のかわりに"for"で始まります。 - <ul> - <li>旧: <code>[i * 2 for (i of numbers)]</code></li> - <li>新: <code>[for (i of numbers) <code>i * 2</code>]</code></li> - </ul> - </li> - <li>ESNext の内包表記は複数の<code>if</code>と<code>for</code>コンポーネントを持ち得ます。</li> - <li>ESNext の内包表記は<code>{{jsxref("Statements/for...of", "for...of")}}</code>でのみ動作し、<code>{{jsxref("Statements/for...in", "for...in")}}</code>イテレーションで 動作しません。</li> -</ul> - -<p>コード更新の提案について、<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1220564#c42">Bug 1220564 のコメント 42</a> をご覧ください。</p> - -<h2 id="関連情報">関連情報</h2> - -<ul> - <li>{{jsxref("Statements/for...of", "for...of")}}</li> - <li>{{jsxref("Operators/Generator_comprehensions", "Generator comprehensions", "" ,1)}}</li> -</ul> diff --git a/files/ja/web/javascript/reference/operators/expression_closures/index.html b/files/ja/web/javascript/reference/operators/expression_closures/index.html deleted file mode 100644 index 6b0df0f858..0000000000 --- a/files/ja/web/javascript/reference/operators/expression_closures/index.html +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: 式クロージャ -slug: Web/JavaScript/Reference/Operators/Expression_closures -tags: - - Functions - - JavaScript - - Reference -translation_of: Archive/Web/JavaScript/Expression_closures ---- -<div class="warning"><strong>非標準。使用しないでください!</strong><br> -式クロージャの構文は、非推奨とされた Firefox 固有の機能であり、Firefox Firefox 60 で削除されました。将来向きの用途には、<a href="/docs/Web/JavaScript/Reference/Functions/Arrow_functions">アロー関数</a> の使用を検討してください。</div> - -<div>{{jsSidebar("Operators")}}</div> - -<p>式クロージャは、単純な関数を書くための短縮された関数構文です。</p> - -<h2 id="構文">構文</h2> - -<pre class="syntaxbox">function [<em>name</em>]([<em>param1</em>[, <em>param2[</em>, ..., <em>paramN</em>]]]) - <em>expression</em> -</pre> - -<h3 id="引数">引数</h3> - -<dl> - <dt><code>name</code></dt> - <dd>関数名。関数が <em>匿名</em> の場合、省略できます。名前は関数本体だけのローカルです。</dd> - <dt><code>paramN</code></dt> - <dd>関数に渡される引数の名前。関数は、最大 255 個の引数を持つことができます。</dd> - <dt><code>expression</code></dt> - <dd>関数本体を構成する式。</dd> -</dl> - -<h2 id="説明">説明</h2> - -<p>これは、単純な関数を書くための短縮された関数構文にすぎません。典型的な <a class="external" href="http://en.wikipedia.org/wiki/Lambda_calculus#Lambda_calculus_and_programming_languages">Lambda 表記</a> に似た言語で書くためのものです。</p> - -<p>JavaScript 1.7 およびそれ以前:</p> - -<pre class="brush: js">function(x) { return x * x; }</pre> - -<p>JavaScript 1.8:</p> - -<pre class="brush: js">function(x) x * x</pre> - -<p>この構文により、中括弧と 'return' 文をなくします (それらは暗黙的に宣言されています)。構文が短くなること以外に、このようにコードを書くことへの付加的な利点はありません。</p> - -<h2 id="例">例</h2> - -<p>イベントリスナをバインドする短縮表現:</p> - -<pre class="brush: js">document.addEventListener("click", function() false, true); -</pre> - -<p>JavaScript 1.6 から、配列関数の一部でこの表記法を用います:</p> - -<pre class="brush: js">elems.some(function(elem) elem.type == "text"); -</pre> - -<h2 id="ブラウザの実装状況">ブラウザの実装状況</h2> - - - -<p>{{Compat("javascript.operators.expression_closures")}}</p> - -<h2 id="関連情報">関連情報</h2> - -<ul> - <li>{{jsxref("Functions_and_function_scope", "関数と関数のスコープ")}}</li> - <li>{{jsxref("Function")}}</li> - <li>{{jsxref("Statements/function", "function statement")}}</li> - <li>{{jsxref("Operators/function", "function expression")}}</li> - <li>{{jsxref("Statements/function*", "function* statement")}}</li> - <li>{{jsxref("Operators/function*", "function* expression")}}</li> - <li>{{jsxref("GeneratorFunction")}}</li> -</ul> diff --git a/files/ja/web/javascript/reference/operators/generator_comprehensions/index.html b/files/ja/web/javascript/reference/operators/generator_comprehensions/index.html deleted file mode 100644 index 250b8fad05..0000000000 --- a/files/ja/web/javascript/reference/operators/generator_comprehensions/index.html +++ /dev/null @@ -1,172 +0,0 @@ ---- -title: ジェネレータ内包表記 -slug: Web/JavaScript/Reference/Operators/Generator_comprehensions -tags: - - Iterator - - JavaScript - - Non-standard - - Reference -translation_of: Archive/Web/JavaScript/Generator_comprehensions ---- -<div class="warning"><strong>非標準。使用しないでください!</strong><br> -ジェネレーター内包は非標準であり、Firefox 58 から削除されています。将来向きの用途には {{jsxref("Statements/function*", "ジェネレーター", "", 1)}} の使用を検討してください。</div> - -<div>{{jsSidebar("Operators")}}</div> - -<p><strong>generator comprehension</strong> 構文はすぐに既存の反復可能なオブジェクトに基づいて新たなジェネレーター関数を組み立てることができる JavaScript の式でした。しかし、これは標準仕様や Firefox の実装から削除されました。使用しないでください!</p> - -<h2 id="構文">構文</h2> - -<pre class="syntaxbox">(for (x of iterable) x) -(for (x of iterable) if (condition) x) -(for (x of iterable) for (y of iterable) x + y) -</pre> - -<h2 id="説明">説明</h2> - -<p>ジェネレータ内包表記の中では、この2種類のコンポーネントが許可されています。:</p> - -<ul> - <li>{{jsxref("Statements/for...of", "for...of")}}</li> - <li>{{jsxref("Statements/if...else", "if")}}</li> -</ul> - -<p><code>for-of</code>イテレーションは常に最初のコンポーネントです。複数の<code>for-of</code> イテレーションまたはif文が許可されています。</p> - -<p>{{jsxref("Operators/Array_comprehensions","配列内包","","true")}} の重大な欠点は、メモリー内に新しい配列全体を構築してしまうことです。配列内包への入力自体が小さい配列であるときのオーバーヘッドは小さいのですが、入力が大きな配列や処理の多い (あるいは本当に無限の) ジェネレーターであるときの配列の新規作成は問題になる場合があります。</p> - -<p>ジェネレーターはアイテムを必要なときに要求に応じて算出するため、一連のデータの計算処理を軽減します。ジェネレーター内包は構文的に、配列内包とほとんど同じです。こちらは中括弧の代わりに丸括弧を使用して、配列を構築する代わりに、すぐには実行されないジェネレーターを作成します。これらは、ジェネレーター作成を簡略化した構文と考えることができます。</p> - -<p>整数の大規模な数列に対して反復処理を行うイテレーター <code>it</code> を想定します。数列の値を 2 倍にする反復処理を行う、新たなイテレーターを作成したいとします。配列内包では、2 倍の値を含むのに十分な配列をメモリー内に作成します:</p> - -<pre class="brush: js">var doubles = [for (i in it) i * 2]; -</pre> - -<p>一方ジェネレーター内包は、必要なときに要求に応じて 2 倍の値を生成するイテレーターを作成します:</p> - -<pre class="brush: js">var it2 = (for (i in it) i * 2); -console.log(it2.next()); // The first value from it, doubled -console.log(it2.next()); // The second value from it, doubled -</pre> - -<p>ジェネレーター内包が関数の引数として使用されるときは、関数の呼び出しで使用される丸括弧によりジェネレーター内包の外側の丸括弧を省略できます:</p> - -<pre class="brush: js">var result = doSomething(for (i in it) i * 2); -</pre> - -<p>2 つの例の大きな違いは、ジェネレーター内包を使用すると 'obj' 構造を合計 1 回しかループする必要がないのと対照的に、配列内包ではイテレートの際に再びループすることです。</p> - -<h2 id="例">例</h2> - -<h3 id="簡単なジェネレータ内包表記">簡単なジェネレータ内包表記</h3> - -<pre class="brush:js">(for (i of [ 1, 2, 3 ]) i*i ); -// generator function which yields 1, 4, and 9 - -[...(for (i of [ 1, 2, 3 ]) i*i )]; -// [1, 4, 9] - -var abc = [ "A", "B", "C" ]; -(for (letters of abc) letters.toLowerCase()); -// generator function which yields "a", "b", and "c" -</pre> - -<h3 id="if文と用いたジェネレータ内包表記">if文と用いたジェネレータ内包表記</h3> - -<pre class="brush: js">var years = [ 1954, 1974, 1990, 2006, 2010, 2014 ]; - -(for (year of years) if (year > 2000) year); -// generator function which yields 2006, 2010, and 2014 - -(for (year of years) if (year > 2000) if(year < 2010) year); -// generator function which yields 2006, the same as below: - -(for (year of years) if (year > 2000 && year < 2010) year); -// generator function which yields 2006 -</pre> - -<h3 id="ジェネレータ関数と比較したジェネレータ内包表記">ジェネレータ関数と比較したジェネレータ内包表記</h3> - -<p>ジェネレータ内包表記構文を理解する簡単な方法はジェネレータ関数と比較することです。</p> - -<p>例 1: 簡単なジェネレータ</p> - -<pre class="brush: js">var numbers = [ 1, 2, 3 ]; - -// Generator function -(function*() { - for (let i of numbers) { - yield i * i; - } -})() - -// Generator comprehension -(for (i of numbers) i*i ); - -// Result: both return a generator which yields [ 1, 4, 9 ] -</pre> - -<p>例 2: ジェネレータ内で<code>if</code>を使用する</p> - -<pre class="brush: js">var numbers = [ 1, 2, 3 ]; - -// Generator function -(function*() { - for (let i of numbers) { - if (i < 3) { - yield i * 1; - } - } -})() - -// Generator comprehension -(for (i of numbers) if (i < 3) i); - -// Result: both return a generator which yields [ 1, 2 ]</pre> - -<h2 id="Specifications" name="Specifications">仕様</h2> - -<p>ジェネレーター内包は、ECMAScript 2015 で初期化されましたが、リビジョン 27 (2014 年 8 月) で取り除かれました。仕様セマンティクスについて、ES2015 の古いリビジョンをご覧ください。</p> - -<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザー実装状況</h2> - - - -<p>{{Compat("javascript.operators.generator_comprehensions")}}</p> - -<h2 id="Differences_to_the_older_JS1.7JS1.8_comprehensions" name="Differences_to_the_older_JS1.7JS1.8_comprehensions">古い JS1.7/JS1.8 の内包表記との違い</h2> - -<div class="warning">JS1.7/JS1.8 の内包表記は、バージョン 46 で削除しました ({{bug(1220564)}})。</div> - -<p><strong>古い内包表記の構文 (使用しないでください!):</strong></p> - -<pre class="brush: js example-bad">(X for (Y in Z)) -(X for each (Y in Z)) -(X for (Y of Z)) -</pre> - -<p>違い:</p> - -<ul> - <li>ESNext の内包表記は全体のかわりに"for"ノードごとに1スコープを生成します。 - <ul> - <li>旧: <code>[...(()=>x for (x of [0, 1, 2]))][1]() // 2</code></li> - <li>新: <code>[...(for (x of [0, 1, 2]) ()=>x)][1]() // 1, each iteration creates a fresh binding for x. </code></li> - </ul> - </li> - <li>ESNext の内包表記は代入式のかわりに"for"で始まります。 - <ul> - <li>旧: <code>(i * 2 for (i of numbers))</code></li> - <li>新: <code>(for (i of numbers) <code>i * 2</code>)</code></li> - </ul> - </li> - <li>ESNext の内包表記は複数の<code>if</code>と<code>for</code>コンポーネントを持ちます。</li> - <li>ESNext の内包表記は<code>{{jsxref("Statements/for...of", "for...of")}}</code>でのみ動作し、<code>{{jsxref("Statements/for...in", "for...in")}}</code>イテレーションでは動作しません。</li> -</ul> - -<h2 id="関連情報">関連情報</h2> - -<ul> - <li>{{jsxref("Statements/for...of", "for...of")}}</li> - <li>{{jsxref("Operators/Array_comprehensions", "Array comprehensions")}}</li> -</ul> |