2
2
3
3
JavaScriptで最も使われる2つのデータ構造は ` Object ` と ` Array ` です。
4
4
5
- オブジェクトは多くの情報を1つのエンティティにまとめることができ、配列は順序付けされたコレクションを格納することが出来ます 。従って、私たちはオブジェクトまたは配列を作りそれを1つのエンティティとして扱うことができます。もしくはそれを関数呼出しに渡すこともできます 。
5
+ オブジェクトは多くの情報を1つのエンティティにまとめることができ、配列は順序付けされたコレクションを格納することができます 。従って、私たちはオブジェクトまたは配列を作り、それを1つのエンティティとして扱うことができます。また、それを関数呼び出しの際に渡すこともできます 。
6
6
7
- * Destructuring assignment (分割代入 )* は配列またはオブジェクトの中身を複数の変数に代入できる特別な構文で、便利な場合があります 。デストラクタリング(構造の分解)は、多くのパラメータとデフォルト値を持つ複雑な関数でもうまく機能し、このチャプターですぐにこれらがどのように処理されているかわかるでしょう 。
7
+ * 分割代入( Destructuring assignment)* は、配列またはオブジェクトの中身を複数の変数に代入できる特別な構文です 。デストラクタリング(非構造化/ 構造の分解)は、多くのパラメータとデフォルト値を持つ複雑な関数でもうまく機能します。このチャプターでは、すぐにこれらがどのように処理されているかわかるでしょう 。
8
8
9
9
[ cut]
10
10
11
- ## Array のデストラクタリング
11
+ ## Array の非構造化
12
12
13
- 配列がどのように変数に分解されるかの例です :
13
+ 配列を変数に分割する方法の例です :
14
14
15
15
``` js
16
- // 名前と姓の配列を持っています
16
+ // 姓名の配列があります
17
17
let arr = [" Ilya" , " Kantor" ]
18
18
19
19
* ! *
@@ -25,9 +25,9 @@ alert(firstName); // Ilya
25
25
alert (surname); // Kantor
26
26
```
27
27
28
- これで、配列メンバーの代わりに変数を扱うことができます 。
28
+ これで、配列要素の代わりに変数を扱うことができます 。
29
29
30
- ` split ` や他の配列を返すメソッドと組み合わせるとよいです :
30
+ ` split ` やその他配列を返すメソッドと組み合わせると便利です :
31
31
32
32
``` js
33
33
let [firstName, surname] = " Ilya Kantor" .split (' ' );
@@ -49,19 +49,19 @@ let surname = arr[1];
49
49
50
50
```js run
51
51
*!*
52
- // 1番目、2番めの要素は不要です
52
+ // 1番目、2番目の要素が不要の場合
53
53
let [, , title] = ["Julius", "Caesar", "Consul", "of the Roman Republic"];
54
54
*/!*
55
55
56
56
alert( title ); // Consul
57
57
```
58
58
59
- 上のコードでは、最初と2つ目の配列の要素がスキップされていますが 、3つ目は `title` に代入され、残りもまたスキップされています 。
59
+ 上のコードでは、最初の2つの要素がスキップされ 、3つ目は `title` に代入され、残りもスキップされています 。
60
60
````
61
61
62
- ```` smart header="右辺の任意の反復可能なもの (iterable)に対して動作します"
62
+ ```` smart header="右辺は任意の反復可能 (iterable)に対して動作します"
63
63
64
- ...実際には、配列だけでなく任意の反復可能なもの (iterable)で使うことができます :
64
+ 実際には配列だけでなく、任意の反復可能 (iterable)に対して使うことができます :
65
65
66
66
```js
67
67
let [a, b, c] = "abc"; // ["a", "b", "c"]
@@ -71,9 +71,9 @@ let [one, two, three] = new Set([1, 2, 3]);
71
71
````
72
72
73
73
74
- ```` smart header="左辺の任意のものに代入する "
74
+ ```` smart header="左辺では任意のものに代入することが可能です "
75
75
76
- 左辺には任意の "割り当て可能なもの" を使用できます 。
76
+ 左辺には任意の "割り当て可能なもの" を指定することができます 。
77
77
78
78
例えば、オブジェクトのプロパティも指定できます:
79
79
```js run
@@ -87,9 +87,9 @@ alert(user.name); // Ilya
87
87
88
88
```` smart header=".entries() を使ったループ"
89
89
90
- 以前のチャプターで、私たちは [Object.entries(obj)](mdn:js/Object/entries) メソッドを見ました。
90
+ 以前のチャプターで、[Object.entries(obj)](mdn:js/Object/entries) メソッドを見ました。
91
91
92
- オブジェクトの key-value をループするために、それをデストラクタリングと一緒使うこともできます :
92
+ オブジェクトの key-value をループするのに、分割代入を一緒に使うこともできます :
93
93
94
94
```js run
95
95
let user = {
@@ -105,7 +105,7 @@ for (let [key, value] of Object.entries(user)) {
105
105
}
106
106
```
107
107
108
- ...また、 map でも同じです :
108
+ map も同様です :
109
109
110
110
```js run
111
111
let user = new Map();
@@ -122,7 +122,7 @@ for (let [key, value] of user.entries()) {
122
122
123
123
### 残り '...'
124
124
125
- もしも、単に1つ目の値だけではなく、それに続く全てを集めたい場合 -- 3つのドッド ` "..." ` を使うことで "残りの部分" を取得するもう1つのパラメータを追加することができます :
125
+ 最初の値を取得するだけでなく、それに続くすべての値も集めたい場合、"残りの部分" の取得を意味する 3つのドッド ` "..." ` をパラメータに追加することで実現できます :
126
126
127
127
128
128
``` js run
@@ -138,11 +138,11 @@ alert(rest.length); // 2
138
138
*/ ! *
139
139
```
140
140
141
- ` rest ` の値は残りの配列要素の配列です 。 ` rest ` の代わりに他の変数名を使うこともできます。その前に3つのドットがあることを確認して、最後に分割代入を行います 。
141
+ ` rest ` は残りの値が要素として格納されている配列です 。 ` rest ` の代わりに他の変数名を使うこともできます。変数名の前には3つのドットがあり、利用時には分割代入の最後にくるようにしてください 。
142
142
143
143
### デフォルト値
144
144
145
- もしも代入変数よりも配列の値のほうが少ない場合 、エラーにはなりません。不足している値は undefined とみなされます:
145
+ 代入する変数の数よりも配列の要素数のほうが少ない場合 、エラーにはなりません。不足している値は undefined とみなされます:
146
146
147
147
``` js run
148
148
* ! *
@@ -152,7 +152,7 @@ let [firstName, surname] = [];
152
152
alert (firstName); // undefined
153
153
```
154
154
155
- 値がなかった場合に "デフォルト" 値に置き換えたいとき 、` = ` を使って値を指定することができます :
155
+ 値がなかった場合に "デフォルト" 値を使いたければ 、` = ` を使ってデフォルト値を指定することができます :
156
156
157
157
``` js run
158
158
* ! *
@@ -161,12 +161,12 @@ let [name = "Guest", surname = "Anonymous"] = ["Julius"];
161
161
*/ ! *
162
162
163
163
alert (name); // Julius (配列から)
164
- alert (surname); // Anonymous (デフォルtが使用された )
164
+ alert (surname); // Anonymous (デフォルトが使用されました )
165
165
```
166
166
167
167
デフォルト値はより複雑な式や関数呼び出しにすることもできます。それらは値が提供されなかったときのみ評価されます。
168
168
169
- 例えば、ここでは、2つのデフォルトのために ` prompt ` 関数を使っていますが、それは値がなかったものの場合にだけ実行されます :
169
+ 例えば、ここでは2つのデフォルトに対して ` prompt ` 関数を使っていますが、値がなかった場合のみ実行されます :
170
170
171
171
``` js run
172
172
// 姓のプロンプトのみを実行する
@@ -177,7 +177,7 @@ alert(surname); // プロンプトが得たもの
177
177
```
178
178
179
179
180
- ## オブジェクトのデストラクタリング
180
+ ## オブジェクトの非構造化
181
181
182
182
分割代入はオブジェクトでも動作します。
183
183
@@ -187,7 +187,7 @@ alert(surname); // プロンプトが得たもの
187
187
let {var1, var2} = {var1: …, var2…}
188
188
```
189
189
190
- 右辺には、変数に分割したい既存のオブジェクトがあります。左辺は該当するプロパティの "パターン" を含みます。シンプルなケースでは 、それは ` {...} ` の変数名のリストです 。
190
+ 右辺には、変数に分割したい既存のオブジェクトがあります。左辺には該当するプロパティの "パターン" を指定します。単純なケースでは 、それは ` {...} ` に変数名を並べたものです 。
191
191
192
192
例:
193
193
@@ -216,7 +216,7 @@ let {height, width, title} = { title: "Menu", height: 200, width: 100 }
216
216
217
217
左辺のパターンはより複雑で、プロパティと変数の間のマッピングを指定することができます。
218
218
219
- もしプロパティを別の名前の変数に代入したい場合 、例えば、` options.width ` を変数名 ` w ` にしたい場合、コロンを使うことでセットすることができます:
219
+ プロパティを別の名前の変数に代入したい場合 、例えば、` options.width ` を変数名 ` w ` にしたい場合、コロンを使うことでセットすることができます:
220
220
221
221
``` js run
222
222
let options = {
@@ -226,7 +226,7 @@ let options = {
226
226
};
227
227
228
228
* ! *
229
- // { sourceProperty: targetVariable }
229
+ // { 元のプロパティ: ターゲットとなる変数 }
230
230
let {width: w, height: h, title} = options;
231
231
*/ ! *
232
232
@@ -239,9 +239,9 @@ alert(w); // 100
239
239
alert (h); // 200
240
240
```
241
241
242
- コロンは "代入するプロパティ名: 代入先の変数名" となります 。上の例では、プロパティ ` width ` は ` w ` に、プロパティ ` height ` は ` h ` , ` title ` は同じ名前に代入されます。
242
+ コロンは "何を: どこに" を示します 。上の例では、プロパティ ` width ` は ` w ` に、プロパティ ` height ` は ` h ` , ` title ` は同じ名前に代入されます。
243
243
244
- 潜在的に不足しているプロパティについては 、次のように ` "=" ` を使ってデフォルト値を設定できます:
244
+ 値がない可能性のあるプロパティについては 、次のように ` "=" ` を使ってデフォルト値を設定できます:
245
245
246
246
``` js run
247
247
let options = {
@@ -257,7 +257,7 @@ alert(width); // 100
257
257
alert (height); // 200
258
258
```
259
259
260
- ちょうど配列や関数のパラメータのように 、デフォルト値は任意の式または関数呼び出しにすることができます。それらは値がない場合に評価されます。
260
+ 配列や関数パラメータのように 、デフォルト値は任意の式または関数呼び出しにすることができます。それらは値がない場合に評価されます。
261
261
262
262
下のコードは、 width はプロンプトで尋ねられますが、 title は聞かれません。
263
263
@@ -274,7 +274,7 @@ alert(title); // Menu
274
274
alert (width); // (プロンプトの結果)
275
275
```
276
276
277
- コロンと等号の両方を組み合わせることも出来ます 。:
277
+ コロンと等号の両方を組み合わせることもできます 。:
278
278
279
279
``` js run
280
280
let options = {
@@ -290,11 +290,11 @@ alert(w); // 100
290
290
alert (h); // 200
291
291
```
292
292
293
- ### 残りの演算子
293
+ ### 残りの演算子(Rest operator)
294
294
295
- 仮に、指定した変数よりも多くのプロパティをオブジェクトがもっていたらどうなるでしょうか。いくつかを設定し 、"残り" をどこかに代入することはできるでしょうか ?
295
+ 仮に、指定した変数よりも多くのプロパティをオブジェクトがもっていたらどうなるでしょうか。いくつか設定した後 、"残り" をどこかにまとめて代入することはできるでしょうか ?
296
296
297
- 残りの演算子(3つの点)を使用するための仕様はほぼ標準ですが 、ほとんどのブラウザではまだサポートされていません。
297
+ ここで、 残りの演算子(3つのドット)を使用するという仕様はほぼ標準ですが 、ほとんどのブラウザではまだサポートされていません。
298
298
299
299
このようになります:
300
300
@@ -327,7 +327,7 @@ let title, width, height;
327
327
{title, width, height} = {title: " Menu" , width: 200 , height: 100 };
328
328
```
329
329
330
- 問題は、JavaScriptが(別の式の中ではなく)メインコードフローの `{...}' をコードブロックとして扱うことです。このようなコードブロックを使用すると、次のように文をグループ化できます 。
330
+ 問題は、JavaScriptがメインコードフローの `{...}' をコードブロックとして扱うことです。このようなコードブロックは、次のように文をグループ化するために使われます 。
331
331
332
332
``` js run
333
333
{
@@ -338,7 +338,7 @@ let title, width, height;
338
338
}
339
339
```
340
340
341
- コードブロックではない JavaScript と示すためには 、代入全体を括弧 ` (...) ` で囲む必要があります:
341
+ コードブロックではないと JavaScript に示すためには 、代入全体を括弧 ` (...) ` で囲む必要があります:
342
342
343
343
``` js run
344
344
let title, width, height;
@@ -351,11 +351,11 @@ alert( title ); // Menu
351
351
352
352
` ` ` `
353
353
354
- ## 入れ子構造のデストラクタリング
354
+ ## 入れ子構造の非構造化
355
355
356
- オブジェクトまたは配列に他のオブジェクトや配列が含まれている場合、より複雑な左辺のパターンを使用してより深い部分を抽出することができます 。
356
+ オブジェクトまたは配列に他のオブジェクトや配列が含まれている場合、より複雑な左辺のパターンを使用して、より深い部分を抽出することもできます 。
357
357
358
- 下のコードでは、` options` はプロパティ ` size` の中に別のオブジェクトを持っており、プロパティ ` items` に配列を持っています。代入の左辺のパターンは同じ構造を持ちます 。:
358
+ 下のコードでは、` options` はプロパティ ` size` の中に別のオブジェクトを持っており、プロパティ ` items` に配列を持っています。ここで、代入する左辺のパターンは同じ構造を持っています 。:
359
359
360
360
` ` ` js run
361
361
let options = {
@@ -369,11 +369,11 @@ let options = {
369
369
370
370
// わかりやすくするために、複数の行での分割代入
371
371
let {
372
- size: { // put size here
372
+ size: { // ここにサイズを格納
373
373
width,
374
374
height
375
375
},
376
- items: [item1, item2], // ここで items を割り当て
376
+ items: [item1, item2], // ここに items を割り当てる
377
377
title = " Menu" // オブジェクトには存在しない (デフォルト値が使われます)
378
378
} = options;
379
379
@@ -384,13 +384,13 @@ alert(item1); // Cake
384
384
alert (item2); // Donut
385
385
` ` `
386
386
387
- 言及されていなかった ` extra` を除いた ` options` オブジェクト全体が該当する変数に代入されます。
387
+ 左辺で言及されていなかった ` extra` を除いた ` options` オブジェクト全体が該当する変数に代入されます。
388
388
389
389

390
390
391
- 最終的に 、` width` , ` height` , ` item1` , ` item2` とデフォルト値から ` title` を持ちます 。
391
+ 最終的には 、` width` , ` height` , ` item1` , ` item2` と、デフォルト値から ` title` を得ます 。
392
392
393
- それは分割代入ではよく起こります 。私たちは、多くのプロパティを持つ複雑なオブジェクトを持っており、必要なものだけを抽出したいため 。
393
+ これは分割代入ではよく起こります 。私たちは、多くのプロパティを持つ複雑なオブジェクトを持っており、必要なものだけを抽出したいからです 。
394
394
395
395
このようなことも頻繁にあります。:
396
396
` ` ` js
@@ -402,27 +402,27 @@ let { size } = options;
402
402
403
403
ある関数が多くのパラメータを持っており、ほどんどがオプションであることがあります。特にユーザインタフェースのときに当てはまります。メニューを作る関数を想像してみてください。幅と高さ、タイトル、アイテムのリストなどを持っています。
404
404
405
- ここに、このような関数の悪い書き方があります :
405
+ ここに、良くない関数の書き方があります :
406
406
407
407
` ` ` js
408
408
function showMenu (title = " Untitled" , width = 200 , height = 100 , items = []) {
409
409
// ...
410
410
}
411
411
` ` `
412
412
413
- 現実において、問題はどうやって引数の順番を覚えるか 、です。通常は IDE が助けてくれます、特にコードが良くドキュメント化されていれば 。しかし、他にも…別の問題はほとんどのパタメータがデフォルトでOKの場合の関数の呼び方です 。
413
+ 現実の問題の1つは、どうやって引数の順番を覚えるか 、です。コードがしっかりドキュメント化されていれば、 通常は IDE が助けてくれます。しかし、他にも問題があります。ほとんどのパタメータがデフォルトでOKの場合の関数の呼び方です 。
414
414
415
415
こうなりますか?
416
416
417
417
` ` ` js
418
418
showMenu (" My Menu" , undefined , undefined , [" Item1" , " Item2" ])
419
419
` ` `
420
420
421
- これは酷く、より多くのパラメータを扱うときに読みにくくなります 。
421
+ これは見にくく、より多くのパラメータを扱う場合、非常に読みにくいです 。
422
422
423
- このようなケースでデストラクタリングが助けに来てくれます !
423
+ このようなケースで非構造化が役に立ちます !
424
424
425
- オブエジェクトとしてパラメータを渡し、関数はそれらを変数に分解することができます :
425
+ オブエジェクトとしてパラメータを渡し、関数はそれらを変数に分解します :
426
426
427
427
` ` ` js run
428
428
// オブジェクトを関数に渡す
@@ -431,7 +431,7 @@ let options = {
431
431
items: [" Item1" , " Item2" ]
432
432
};
433
433
434
- // ...そしてすぐに変数に展開されます
434
+ // ...そしてすぐに変数に展開します
435
435
function showMenu (* ! * {title = " Untitled" , width = 200 , height = 100 , items = []}*/ ! * ) {
436
436
// title, items – options から取得,
437
437
// width, height – デフォルト値を利用
@@ -442,7 +442,7 @@ function showMenu(*!*{title = "Untitled", width = 200, height = 100, items = []}
442
442
showMenu (options);
443
443
` ` `
444
444
445
- また、入れ子のオブジェクトやコロンのマッピング使った複雑なデストラクタリングを使うこともできます :
445
+ また、入れ子のオブジェクトやコロンのマッピング使った複雑な非構造化を使うこともできます :
446
446
447
447
` ` ` js run
448
448
let options = {
@@ -453,8 +453,8 @@ let options = {
453
453
* ! *
454
454
function showMenu ({
455
455
title = " Untitled" ,
456
- width: w = 100 , // width goes to w
457
- height: h = 200 , // height goes to h
456
+ width: w = 100 , // width は w に
457
+ height: h = 200 , // height は h に
458
458
items: [item1, item2] // items の最初の要素は item1 へ、次は item2 へ
459
459
}) {
460
460
*/ ! *
@@ -469,12 +469,13 @@ showMenu(options);
469
469
構文は分割代入と同じです:
470
470
` ` ` js
471
471
function ({
472
+ // 渡されるプロパティ: 内部で利用するパラメータ名 = デフォルト値
472
473
incomingProperty: parameterName = defaultValue
473
474
...
474
475
})
475
476
```
476
477
477
- このような分割代入は `showMenu()` に引数があることを前提にしている点に注意してください。もし全ての値をデフォルトにしたい場合には 、空のオブジェクトを指定する必要があります:
478
+ なお、 このような分割代入は `showMenu()` に引数があることを前提にしている点に注意してください。もしすべての値をデフォルトにしたい場合には 、空のオブジェクトを指定する必要があります:
478
479
479
480
```js
480
481
showMenu({});
@@ -483,7 +484,7 @@ showMenu({});
483
484
showMenu ();
484
485
```
485
486
486
- これについては、デストラクタリング対象全体のデフォルト値に ` {} ` を指定することで直すことができます :
487
+ これについては、非構造化対象全体のデフォルト値に ` {} ` を指定することで対応することができます :
487
488
488
489
489
490
``` js run
0 commit comments