From a065e04d529da1d847b5062a12c46d916408bf32 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 21:46:22 -0500 Subject: update based on https://github.com/mdn/yari/issues/2028 --- .../operators/array_comprehensions/index.html | 198 --------------------- .../operators/expression_closures/index.html | 76 -------- .../operators/generator_comprehensions/index.html | 172 ------------------ 3 files changed, 446 deletions(-) delete mode 100644 files/ja/web/javascript/reference/operators/array_comprehensions/index.html delete mode 100644 files/ja/web/javascript/reference/operators/expression_closures/index.html delete mode 100644 files/ja/web/javascript/reference/operators/generator_comprehensions/index.html (limited to 'files/ja/web/javascript/reference/operators') 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 ---- -
非標準。使用しないでください!
-配列内包は非標準であり、Firefox 58 から削除されています。将来向きの用途には、{{jsxref("Array.prototype.map")}}、{{jsxref("Array.prototype.filter")}}、{{jsxref("Functions/Arrow_functions", "アロー関数", "", 1)}}、{{jsxref("Operators/Spread_operator", "スプレッド構文", "", 1)}} の使用を検討してください。
- -
{{jsSidebar("Operators")}}
- -

array comprehension 構文は、既存のものに基づいている新しい配列をすばやく組み立てることができるJavaScriptの式でした。しかし、これは標準仕様や Firefox の実装から削除されました。使用しないでください!

- -

構文

- -
[for (x of iterable) x]
-[for (x of iterable) if (condition) x]
-[for (x of iterable) for (y of iterable) x + y]
-
- -

説明

- -

配列の内包表記内で、下記の二種類のコンポーネントが許されています。:

- - - -

for-of イテレーションは常に最初のコンポーネントです。複数のfor-of イテレーションは、ステートメントが許可されている場合。

- -

配列内包は以前、ECMAScript 2016 で標準化を提案されていました。これは別のものに基づいて新たな配列を構成するための手っ取り早い方法を提供します。配列内包は一般に、{{jsxref("Array.prototype.map", "map()")}} および {{jsxref("Array.prototype.filter", "filter()")}} を呼び出す代わりとして、あるいはそれら 2 つを結合する手段として用いることができます。

- -

次の配列内包は数値の配列を取り込んで、その各数値を 2 倍した値による新しい配列を作成します。

- -
var numbers = [1, 2, 3, 4];
-var doubled = [for (i of numbers) i * 2];
-console.log(doubled); // logs 2,4,6,8
-
- -

これは以下の {{jsxref("Array.prototype.map", "map()")}} による操作と同等です:

- -
var doubled = numbers.map(i => i * 2);
-
- -

配列内包は、特定の式にマッチするアイテムの選択に用いることもできます。以下は、偶数だけを選択する内包です:

- -
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
-
- -

同じ目的で {{jsxref("Array.prototype.filter", "filter()")}} を用いることができます:

- -
var evens = numbers.filter(i => i % 2 === 0);
-
- -

{{jsxref("Array.prototype.map", "map()")}} および {{jsxref("Array.prototype.filter", "filter()")}} 方式の操作を、ひとつの配列内包に統合することができます。以下は偶数だけをフィルタリングして、それらを 2 倍した値を含む配列を作成します:

- -
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
-
- -

配列内包の角括弧は、スコープ目的の暗黙的なブロックをもたらします。新しい変数 (上記の例における i ) は、{{jsxref("Statements/let","let")}} を用いて宣言されたかのように扱われます。つまり、それらの変数は配列内包の外部で使用できません。

- -

配列内包の入力自体は、配列である必要はありません。イテレータおよびジェネレータ も使用できます。

- -

文字列を入力とすることもできます。(配列状のオブジェクトにおいて) 前出の filter や map の動作を実現するには以下のようにします:

- -
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'
-
- -

繰り返しになりますが入力データの形式は維持されませんので、文字列へ戻すために {{jsxref("Array.prototype.join", "join()")}} を使用しなければなりません。

- -

- -

簡単な配列の内包表記

- -
[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" ]
- -

if文で配列の内包表記

- -
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]
-
- -

mapfilterを比較する配列の内包表記

- -

配列の内包表記構文を理解する簡単な方法は、Array {{jsxref("Array.map", "map")}}や{{jsxref("Array.filter", "filter")}}メソッドと比較することです。:

- -
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 ]
-
- -

二つの配列の内包表記

- -

二つの配列で動作させるために二つのfor-ofイテレーションを使用する:

- -
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"]]
-
- -

仕様

- -

最初は ECMAScript 2015 のドラフトでしたが、リビジョン 27 (2014 年 8 月) で取り除かれました。仕様セマンティクスのために ES2015 の古いリビジョンを参照してください。

- -

ブラウザー実装状況

- - - -

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

- -

古い JS1.7/JS1.8 の内包表記との違い

- -
JS1.7/JS1.8 の内包表記は、バージョン 46 で Gecko から削除しました ({{bug(1220564)}})。
- -

古い内包表記の構文 (使用しないでください!):

- -
[X for (Y in Z)]
-[X for each (Y in Z)]
-[X for (Y of Z)]
-
- -

違い:

- - - -

コード更新の提案について、Bug 1220564 のコメント 42 をご覧ください。

- -

関連情報

- - 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 ---- -
非標準。使用しないでください!
-式クロージャの構文は、非推奨とされた Firefox 固有の機能であり、Firefox Firefox 60 で削除されました。将来向きの用途には、アロー関数 の使用を検討してください。
- -
{{jsSidebar("Operators")}}
- -

式クロージャは、単純な関数を書くための短縮された関数構文です。

- -

構文

- -
function [name]([param1[, param2[, ..., paramN]]])
-   expression
-
- -

引数

- -
-
name
-
関数名。関数が 匿名 の場合、省略できます。名前は関数本体だけのローカルです。
-
paramN
-
関数に渡される引数の名前。関数は、最大 255 個の引数を持つことができます。
-
expression
-
関数本体を構成する式。
-
- -

説明

- -

これは、単純な関数を書くための短縮された関数構文にすぎません。典型的な Lambda 表記 に似た言語で書くためのものです。

- -

JavaScript 1.7 およびそれ以前:

- -
function(x) { return x * x; }
- -

JavaScript 1.8:

- -
function(x) x * x
- -

この構文により、中括弧と 'return' 文をなくします (それらは暗黙的に宣言されています)。構文が短くなること以外に、このようにコードを書くことへの付加的な利点はありません。

- -

- -

イベントリスナをバインドする短縮表現:

- -
document.addEventListener("click", function() false, true);
-
- -

JavaScript 1.6 から、配列関数の一部でこの表記法を用います:

- -
elems.some(function(elem) elem.type == "text");
-
- -

ブラウザの実装状況

- - - -

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

- -

関連情報

- - 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 ---- -
非標準。使用しないでください!
-ジェネレーター内包は非標準であり、Firefox 58 から削除されています。将来向きの用途には {{jsxref("Statements/function*", "ジェネレーター", "", 1)}} の使用を検討してください。
- -
{{jsSidebar("Operators")}}
- -

generator comprehension 構文はすぐに既存の反復可能なオブジェクトに基づいて新たなジェネレーター関数を組み立てることができる JavaScript の式でした。しかし、これは標準仕様や Firefox の実装から削除されました。使用しないでください!

- -

構文

- -
(for (x of iterable) x)
-(for (x of iterable) if (condition) x)
-(for (x of iterable) for (y of iterable) x + y)
-
- -

説明

- -

ジェネレータ内包表記の中では、この2種類のコンポーネントが許可されています。:

- - - -

for-ofイテレーションは常に最初のコンポーネントです。複数のfor-of イテレーションまたはif文が許可されています。

- -

{{jsxref("Operators/Array_comprehensions","配列内包","","true")}} の重大な欠点は、メモリー内に新しい配列全体を構築してしまうことです。配列内包への入力自体が小さい配列であるときのオーバーヘッドは小さいのですが、入力が大きな配列や処理の多い (あるいは本当に無限の) ジェネレーターであるときの配列の新規作成は問題になる場合があります。

- -

ジェネレーターはアイテムを必要なときに要求に応じて算出するため、一連のデータの計算処理を軽減します。ジェネレーター内包は構文的に、配列内包とほとんど同じです。こちらは中括弧の代わりに丸括弧を使用して、配列を構築する代わりに、すぐには実行されないジェネレーターを作成します。これらは、ジェネレーター作成を簡略化した構文と考えることができます。

- -

整数の大規模な数列に対して反復処理を行うイテレーター it を想定します。数列の値を 2 倍にする反復処理を行う、新たなイテレーターを作成したいとします。配列内包では、2 倍の値を含むのに十分な配列をメモリー内に作成します:

- -
var doubles = [for (i in it) i * 2];
-
- -

一方ジェネレーター内包は、必要なときに要求に応じて 2 倍の値を生成するイテレーターを作成します:

- -
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
-
- -

ジェネレーター内包が関数の引数として使用されるときは、関数の呼び出しで使用される丸括弧によりジェネレーター内包の外側の丸括弧を省略できます:

- -
var result = doSomething(for (i in it) i * 2);
-
- -

2 つの例の大きな違いは、ジェネレーター内包を使用すると 'obj' 構造を合計 1 回しかループする必要がないのと対照的に、配列内包ではイテレートの際に再びループすることです。

- -

- -

簡単なジェネレータ内包表記

- -
(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"
-
- -

if文と用いたジェネレータ内包表記

- -
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
-
- -

ジェネレータ関数と比較したジェネレータ内包表記

- -

ジェネレータ内包表記構文を理解する簡単な方法はジェネレータ関数と比較することです。

- -

例 1: 簡単なジェネレータ

- -
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 ]
-
- -

例 2: ジェネレータ内でifを使用する

- -
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 ]
- -

仕様

- -

ジェネレーター内包は、ECMAScript 2015 で初期化されましたが、リビジョン 27 (2014 年 8 月) で取り除かれました。仕様セマンティクスについて、ES2015 の古いリビジョンをご覧ください。

- -

ブラウザー実装状況

- - - -

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

- -

古い JS1.7/JS1.8 の内包表記との違い

- -
JS1.7/JS1.8 の内包表記は、バージョン 46 で削除しました ({{bug(1220564)}})。
- -

古い内包表記の構文 (使用しないでください!):

- -
(X for (Y in Z))
-(X for each (Y in Z))
-(X for (Y of Z))
-
- -

違い:

- - - -

関連情報

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