Skip to content

Commit 9efb98a

Browse files
committed
review - destructuring-assignment
1 parent 8abcde1 commit 9efb98a

File tree

1 file changed

+55
-54
lines changed
  • 1-js/05-data-types/09-destructuring-assignment

1 file changed

+55
-54
lines changed

1-js/05-data-types/09-destructuring-assignment/article.md

Lines changed: 55 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,18 @@
22

33
JavaScriptで最も使われる2つのデータ構造は `Object``Array` です。
44

5-
オブジェクトは多くの情報を1つのエンティティにまとめることができ、配列は順序付けされたコレクションを格納することが出来ます。従って、私たちはオブジェクトまたは配列を作りそれを1つのエンティティとして扱うことができます。もしくはそれを関数呼出しに渡すこともできます
5+
オブジェクトは多くの情報を1つのエンティティにまとめることができ、配列は順序付けされたコレクションを格納することができます。従って、私たちはオブジェクトまたは配列を作り、それを1つのエンティティとして扱うことができます。また、それを関数呼び出しの際に渡すこともできます
66

7-
*Destructuring assignment (分割代入)* は配列またはオブジェクトの中身を複数の変数に代入できる特別な構文で、便利な場合があります。デストラクタリング(構造の分解)は、多くのパラメータとデフォルト値を持つ複雑な関数でもうまく機能し、このチャプターですぐにこれらがどのように処理されているかわかるでしょう
7+
*分割代入(Destructuring assignment)* は、配列またはオブジェクトの中身を複数の変数に代入できる特別な構文です。デストラクタリング(非構造化/構造の分解)は、多くのパラメータとデフォルト値を持つ複雑な関数でもうまく機能します。このチャプターでは、すぐにこれらがどのように処理されているかわかるでしょう
88

99
[cut]
1010

11-
## Array のデストラクタリング
11+
## Array の非構造化
1212

13-
配列がどのように変数に分解されるかの例です:
13+
配列を変数に分割する方法の例です:
1414

1515
```js
16-
// 名前と姓の配列を持っています
16+
// 姓名の配列があります
1717
let arr = ["Ilya", "Kantor"]
1818

1919
*!*
@@ -25,9 +25,9 @@ alert(firstName); // Ilya
2525
alert(surname); // Kantor
2626
```
2727

28-
これで、配列メンバーの代わりに変数を扱うことができます
28+
これで、配列要素の代わりに変数を扱うことができます
2929

30-
`split` や他の配列を返すメソッドと組み合わせるとよいです:
30+
`split` やその他配列を返すメソッドと組み合わせると便利です:
3131

3232
```js
3333
let [firstName, surname] = "Ilya Kantor".split(' ');
@@ -49,19 +49,19 @@ let surname = arr[1];
4949
5050
```js run
5151
*!*
52-
// 1番目、2番めの要素は不要です
52+
// 1番目、2番目の要素が不要の場合
5353
let [, , title] = ["Julius", "Caesar", "Consul", "of the Roman Republic"];
5454
*/!*
5555
5656
alert( title ); // Consul
5757
```
5858
59-
上のコードでは、最初と2つ目の配列の要素がスキップされていますが、3つ目は `title` に代入され、残りもまたスキップされています
59+
上のコードでは、最初の2つの要素がスキップされ、3つ目は `title` に代入され、残りもスキップされています
6060
````
6161

62-
````smart header="右辺の任意の反復可能なもの(iterable)に対して動作します"
62+
````smart header="右辺は任意の反復可能(iterable)に対して動作します"
6363
64-
...実際には、配列だけでなく任意の反復可能なもの(iterable)で使うことができます:
64+
実際には配列だけでなく、任意の反復可能(iterable)に対して使うことができます:
6565
6666
```js
6767
let [a, b, c] = "abc"; // ["a", "b", "c"]
@@ -71,9 +71,9 @@ let [one, two, three] = new Set([1, 2, 3]);
7171
````
7272

7373

74-
````smart header="左辺の任意のものに代入する"
74+
````smart header="左辺では任意のものに代入することが可能です"
7575
76-
左辺には任意の "割り当て可能なもの" を使用できます
76+
左辺には任意の "割り当て可能なもの" を指定することができます
7777
7878
例えば、オブジェクトのプロパティも指定できます:
7979
```js run
@@ -87,9 +87,9 @@ alert(user.name); // Ilya
8787

8888
````smart header=".entries() を使ったループ"
8989
90-
以前のチャプターで、私たちは [Object.entries(obj)](mdn:js/Object/entries) メソッドを見ました。
90+
以前のチャプターで、[Object.entries(obj)](mdn:js/Object/entries) メソッドを見ました。
9191
92-
オブジェクトの key-value をループするために、それをデストラクタリングと一緒使うこともできます:
92+
オブジェクトの key-value をループするのに、分割代入を一緒に使うこともできます:
9393
9494
```js run
9595
let user = {
@@ -105,7 +105,7 @@ for (let [key, value] of Object.entries(user)) {
105105
}
106106
```
107107
108-
...また、map でも同じです:
108+
map も同様です:
109109
110110
```js run
111111
let user = new Map();
@@ -122,7 +122,7 @@ for (let [key, value] of user.entries()) {
122122

123123
### 残り '...'
124124

125-
もしも、単に1つ目の値だけではなく、それに続く全てを集めたい場合 -- 3つのドッド `"..."` を使うことで "残りの部分" を取得するもう1つのパラメータを追加することができます:
125+
最初の値を取得するだけでなく、それに続くすべての値も集めたい場合、"残りの部分" の取得を意味する 3つのドッド `"..."` をパラメータに追加することで実現できます:
126126

127127

128128
```js run
@@ -138,11 +138,11 @@ alert(rest.length); // 2
138138
*/!*
139139
```
140140

141-
`rest` の値は残りの配列要素の配列です`rest` の代わりに他の変数名を使うこともできます。その前に3つのドットがあることを確認して、最後に分割代入を行います
141+
`rest` は残りの値が要素として格納されている配列です`rest` の代わりに他の変数名を使うこともできます。変数名の前には3つのドットがあり、利用時には分割代入の最後にくるようにしてください
142142

143143
### デフォルト値
144144

145-
もしも代入変数よりも配列の値のほうが少ない場合、エラーにはなりません。不足している値は undefined とみなされます:
145+
代入する変数の数よりも配列の要素数のほうが少ない場合、エラーにはなりません。不足している値は undefined とみなされます:
146146

147147
```js run
148148
*!*
@@ -152,7 +152,7 @@ let [firstName, surname] = [];
152152
alert(firstName); // undefined
153153
```
154154

155-
値がなかった場合に "デフォルト" 値に置き換えたいとき`=` を使って値を指定することができます:
155+
値がなかった場合に "デフォルト" 値を使いたければ`=` を使ってデフォルト値を指定することができます:
156156

157157
```js run
158158
*!*
@@ -161,12 +161,12 @@ let [name = "Guest", surname = "Anonymous"] = ["Julius"];
161161
*/!*
162162

163163
alert(name); // Julius (配列から)
164-
alert(surname); // Anonymous (デフォルtが使用された)
164+
alert(surname); // Anonymous (デフォルトが使用されました)
165165
```
166166

167167
デフォルト値はより複雑な式や関数呼び出しにすることもできます。それらは値が提供されなかったときのみ評価されます。
168168

169-
例えば、ここでは、2つのデフォルトのために `prompt` 関数を使っていますが、それは値がなかったものの場合にだけ実行されます:
169+
例えば、ここでは2つのデフォルトに対して `prompt` 関数を使っていますが、値がなかった場合のみ実行されます:
170170

171171
```js run
172172
// 姓のプロンプトのみを実行する
@@ -177,7 +177,7 @@ alert(surname); // プロンプトが得たもの
177177
```
178178

179179

180-
## オブジェクトのデストラクタリング
180+
## オブジェクトの非構造化
181181

182182
分割代入はオブジェクトでも動作します。
183183

@@ -187,7 +187,7 @@ alert(surname); // プロンプトが得たもの
187187
let {var1, var2} = {var1:…, var2…}
188188
```
189189

190-
右辺には、変数に分割したい既存のオブジェクトがあります。左辺は該当するプロパティの "パターン" を含みます。シンプルなケースでは、それは `{...}` の変数名のリストです
190+
右辺には、変数に分割したい既存のオブジェクトがあります。左辺には該当するプロパティの "パターン" を指定します。単純なケースでは、それは `{...}` に変数名を並べたものです
191191

192192
例:
193193

@@ -216,7 +216,7 @@ let {height, width, title} = { title: "Menu", height: 200, width: 100 }
216216

217217
左辺のパターンはより複雑で、プロパティと変数の間のマッピングを指定することができます。
218218

219-
もしプロパティを別の名前の変数に代入したい場合、例えば、`options.width` を変数名 `w` にしたい場合、コロンを使うことでセットすることができます:
219+
プロパティを別の名前の変数に代入したい場合、例えば、`options.width` を変数名 `w` にしたい場合、コロンを使うことでセットすることができます:
220220

221221
```js run
222222
let options = {
@@ -226,7 +226,7 @@ let options = {
226226
};
227227

228228
*!*
229-
// { sourceProperty: targetVariable }
229+
// { 元のプロパティ: ターゲットとなる変数 }
230230
let {width: w, height: h, title} = options;
231231
*/!*
232232

@@ -239,9 +239,9 @@ alert(w); // 100
239239
alert(h); // 200
240240
```
241241

242-
コロンは "代入するプロパティ名: 代入先の変数名" となります。上の例では、プロパティ `width``w`に、プロパティ `height``h`, `title` は同じ名前に代入されます。
242+
コロンは "何を: どこに" を示します。上の例では、プロパティ `width``w`に、プロパティ `height``h`, `title` は同じ名前に代入されます。
243243

244-
潜在的に不足しているプロパティについては、次のように `"="` を使ってデフォルト値を設定できます:
244+
値がない可能性のあるプロパティについては、次のように `"="` を使ってデフォルト値を設定できます:
245245

246246
```js run
247247
let options = {
@@ -257,7 +257,7 @@ alert(width); // 100
257257
alert(height); // 200
258258
```
259259

260-
ちょうど配列や関数のパラメータのように、デフォルト値は任意の式または関数呼び出しにすることができます。それらは値がない場合に評価されます。
260+
配列や関数パラメータのように、デフォルト値は任意の式または関数呼び出しにすることができます。それらは値がない場合に評価されます。
261261

262262
下のコードは、 width はプロンプトで尋ねられますが、 title は聞かれません。
263263

@@ -274,7 +274,7 @@ alert(title); // Menu
274274
alert(width); // (プロンプトの結果)
275275
```
276276

277-
コロンと等号の両方を組み合わせることも出来ます。:
277+
コロンと等号の両方を組み合わせることもできます。:
278278

279279
```js run
280280
let options = {
@@ -290,11 +290,11 @@ alert(w); // 100
290290
alert(h); // 200
291291
```
292292

293-
### 残りの演算子
293+
### 残りの演算子(Rest operator)
294294

295-
仮に、指定した変数よりも多くのプロパティをオブジェクトがもっていたらどうなるでしょうか。いくつかを設定し、"残り" をどこかに代入することはできるでしょうか
295+
仮に、指定した変数よりも多くのプロパティをオブジェクトがもっていたらどうなるでしょうか。いくつか設定した後、"残り" をどこかにまとめて代入することはできるでしょうか
296296

297-
残りの演算子(3つの点)を使用するための仕様はほぼ標準ですが、ほとんどのブラウザではまだサポートされていません。
297+
ここで、残りの演算子(3つのドット)を使用するという仕様はほぼ標準ですが、ほとんどのブラウザではまだサポートされていません。
298298

299299
このようになります:
300300

@@ -327,7 +327,7 @@ let title, width, height;
327327
{title, width, height} = {title: "Menu", width: 200, height: 100};
328328
```
329329

330-
問題は、JavaScriptが(別の式の中ではなく)メインコードフローの `{...}' をコードブロックとして扱うことです。このようなコードブロックを使用すると、次のように文をグループ化できます
330+
問題は、JavaScriptがメインコードフローの `{...}' をコードブロックとして扱うことです。このようなコードブロックは、次のように文をグループ化するために使われます
331331

332332
```js run
333333
{
@@ -338,7 +338,7 @@ let title, width, height;
338338
}
339339
```
340340

341-
コードブロックではない JavaScript と示すためには、代入全体を括弧 `(...)` で囲む必要があります:
341+
コードブロックではないと JavaScript に示すためには、代入全体を括弧 `(...)` で囲む必要があります:
342342

343343
```js run
344344
let title, width, height;
@@ -351,11 +351,11 @@ alert( title ); // Menu
351351
352352
````
353353
354-
## 入れ子構造のデストラクタリング
354+
## 入れ子構造の非構造化
355355
356-
オブジェクトまたは配列に他のオブジェクトや配列が含まれている場合、より複雑な左辺のパターンを使用してより深い部分を抽出することができます
356+
オブジェクトまたは配列に他のオブジェクトや配列が含まれている場合、より複雑な左辺のパターンを使用して、より深い部分を抽出することもできます
357357
358-
下のコードでは、`options` はプロパティ `size` の中に別のオブジェクトを持っており、プロパティ `items` に配列を持っています。代入の左辺のパターンは同じ構造を持ちます。:
358+
下のコードでは、`options` はプロパティ `size` の中に別のオブジェクトを持っており、プロパティ `items` に配列を持っています。ここで、代入する左辺のパターンは同じ構造を持っています。:
359359
360360
```js run
361361
let options = {
@@ -369,11 +369,11 @@ let options = {
369369

370370
// わかりやすくするために、複数の行での分割代入
371371
let {
372-
size: { // put size here
372+
size: { // ここにサイズを格納
373373
width,
374374
height
375375
},
376-
items: [item1, item2], // ここで items を割り当て
376+
items: [item1, item2], // ここに items を割り当てる
377377
title = "Menu" // オブジェクトには存在しない (デフォルト値が使われます)
378378
} = options;
379379

@@ -384,13 +384,13 @@ alert(item1); // Cake
384384
alert(item2); // Donut
385385
```
386386
387-
言及されていなかった `extra` を除いた `options` オブジェクト全体が該当する変数に代入されます。
387+
左辺で言及されていなかった `extra` を除いた `options` オブジェクト全体が該当する変数に代入されます。
388388
389389
![](destructuring-complex.png)
390390
391-
最終的に`width`, `height`, `item1`, `item2` とデフォルト値から `title` を持ちます
391+
最終的には`width`, `height`, `item1`, `item2` と、デフォルト値から `title` を得ます
392392
393-
それは分割代入ではよく起こります。私たちは、多くのプロパティを持つ複雑なオブジェクトを持っており、必要なものだけを抽出したいため
393+
これは分割代入ではよく起こります。私たちは、多くのプロパティを持つ複雑なオブジェクトを持っており、必要なものだけを抽出したいからです
394394
395395
このようなことも頻繁にあります。:
396396
```js
@@ -402,27 +402,27 @@ let { size } = options;
402402
403403
ある関数が多くのパラメータを持っており、ほどんどがオプションであることがあります。特にユーザインタフェースのときに当てはまります。メニューを作る関数を想像してみてください。幅と高さ、タイトル、アイテムのリストなどを持っています。
404404
405-
ここに、このような関数の悪い書き方があります:
405+
ここに、良くない関数の書き方があります:
406406
407407
```js
408408
function showMenu(title = "Untitled", width = 200, height = 100, items = []) {
409409
// ...
410410
}
411411
```
412412
413-
現実において、問題はどうやって引数の順番を覚えるか、です。通常は IDE が助けてくれます、特にコードが良くドキュメント化されていれば。しかし、他にも…別の問題はほとんどのパタメータがデフォルトでOKの場合の関数の呼び方です
413+
現実の問題の1つは、どうやって引数の順番を覚えるか、です。コードがしっかりドキュメント化されていれば、通常は IDE が助けてくれます。しかし、他にも問題があります。ほとんどのパタメータがデフォルトでOKの場合の関数の呼び方です
414414
415415
こうなりますか?
416416
417417
```js
418418
showMenu("My Menu", undefined, undefined, ["Item1", "Item2"])
419419
```
420420
421-
これは酷く、より多くのパラメータを扱うときに読みにくくなります
421+
これは見にくく、より多くのパラメータを扱う場合、非常に読みにくいです
422422
423-
このようなケースでデストラクタリングが助けに来てくれます!
423+
このようなケースで非構造化が役に立ちます!
424424
425-
オブエジェクトとしてパラメータを渡し、関数はそれらを変数に分解することができます:
425+
オブエジェクトとしてパラメータを渡し、関数はそれらを変数に分解します:
426426
427427
```js run
428428
// オブジェクトを関数に渡す
@@ -431,7 +431,7 @@ let options = {
431431
items: ["Item1", "Item2"]
432432
};
433433

434-
// ...そしてすぐに変数に展開されます
434+
// ...そしてすぐに変数に展開します
435435
function showMenu(*!*{title = "Untitled", width = 200, height = 100, items = []}*/!*) {
436436
// title, items – options から取得,
437437
// width, height – デフォルト値を利用
@@ -442,7 +442,7 @@ function showMenu(*!*{title = "Untitled", width = 200, height = 100, items = []}
442442
showMenu(options);
443443
```
444444
445-
また、入れ子のオブジェクトやコロンのマッピング使った複雑なデストラクタリングを使うこともできます:
445+
また、入れ子のオブジェクトやコロンのマッピング使った複雑な非構造化を使うこともできます:
446446
447447
```js run
448448
let options = {
@@ -453,8 +453,8 @@ let options = {
453453
*!*
454454
function showMenu({
455455
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 に
458458
items: [item1, item2] // items の最初の要素は item1 へ、次は item2 へ
459459
}) {
460460
*/!*
@@ -469,12 +469,13 @@ showMenu(options);
469469
構文は分割代入と同じです:
470470
```js
471471
function({
472+
// 渡されるプロパティ: 内部で利用するパラメータ名 = デフォルト値
472473
incomingProperty: parameterName = defaultValue
473474
...
474475
})
475476
```
476477

477-
このような分割代入は `showMenu()` に引数があることを前提にしている点に注意してください。もし全ての値をデフォルトにしたい場合には、空のオブジェクトを指定する必要があります:
478+
なお、このような分割代入は `showMenu()` に引数があることを前提にしている点に注意してください。もしすべての値をデフォルトにしたい場合には、空のオブジェクトを指定する必要があります:
478479

479480
```js
480481
showMenu({});
@@ -483,7 +484,7 @@ showMenu({});
483484
showMenu();
484485
```
485486

486-
これについては、デストラクタリング対象全体のデフォルト値に `{}` を指定することで直すことができます:
487+
これについては、非構造化対象全体のデフォルト値に `{}` を指定することで対応することができます:
487488

488489

489490
```js run

0 commit comments

Comments
 (0)