Skip to content

Commit 2fa07eb

Browse files
committed
review a content - function-expressions-arrows
1 parent 2549287 commit 2fa07eb

File tree

1 file changed

+45
-45
lines changed
  • 1-js/02-first-steps/15-function-expressions-arrows

1 file changed

+45
-45
lines changed

1-js/02-first-steps/15-function-expressions-arrows/article.md

Lines changed: 45 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ JavaScriptでは、関数は "魔法の言語構造" ではなく、特別な種
44

55
[cut]
66

7-
以前私たちが使っているた構文は *関数宣言* と呼ばれます:
7+
前に私たちが使っていた構文は *関数宣言* と呼ばれます:
88

99
```js
1010
function sayHi() {
1111
alert( "Hello" );
1212
}
1313
```
1414

15-
*関数式* と呼ばれる、関数を作るための別の構文があります。
15+
これとは別に、*関数式* と呼ばれる、関数を作るための別の構文があります。
1616

1717
それはこのようになります:
1818

@@ -22,10 +22,10 @@ let sayHi = function() {
2222
};
2323
```
2424

25-
ここで、他の任意の値と同じように、関数は作られ明示的に変数に代入されています
25+
ここでは、関数は他の任意の値と同じように明示的に変数に代入されています
2626
どのように変数が定義されても、それは単に変数 `sayHi` に格納される値です。
2727

28-
これらのコード例の意味は同じです: "関数を作成し、変数 `sayHi` にそれを置きます"
28+
これらのコード例の意味は同じです: "関数を作成し、変数 `sayHi` にそれを格納します"
2929

3030
`alert` を使ってその値を出力することもできます:
3131

@@ -39,15 +39,15 @@ alert( sayHi ); // 関数のコードが表示されます
3939
*/!*
4040
```
4141

42-
`sayHi` の後に括弧がないので、最後の行は関数が実行されないことに注意してください。関数名への言及がその実行を引き起こすプログラミング言語も存在しますが、JavaScriptはそうではありません。
42+
`sayHi` の後に括弧がないので、最後の行は関数は実行されないことに注意してください。関数名への言及がその実行となるプログラミング言語も存在しますが、JavaScriptはそうではありません。
4343

44-
JavaScriptでは、関数は値です。そのため、それを値として扱うことができます。上のコードはその文字列表現を表示し、それはソースコードです。
44+
JavaScriptでは、関数は値です。そのため、それを値として扱うことができます。上のコードはその文字列表現を表示します(それはソースコードです)
4545

4646
`sayHi()` のように呼ぶことができる点で、もちろんそれは特別な値です。
4747

48-
しかし、それはまだ値なので他の種類の値のようにそれを扱うことができます
48+
しかし、それは値なので、他のタイプの値のように扱うことができます
4949

50-
関数を別の変数にコピーすることが出来ます:
50+
関数を別の変数にコピーすることができます:
5151

5252
```js run no-beautify
5353
function sayHi() { // (1) 作成
@@ -60,15 +60,15 @@ func(); // Hello // (3) コピーの実行(動きます)!
6060
sayHi(); // Hello // これもまだ動きます(なぜでしょう?)
6161
```
6262

63-
上記で起こっていることの詳細は次の通りです:
63+
上で起こっていることの詳細は次の通りです:
6464

65-
1. 関数宣言 `(1)` で関数を生成し、変数名 `sayHi` に置きます
65+
1. 関数宣言 `(1)` で関数を生成し、変数名 `sayHi` に格納します
6666
2.`(2)` でそれを変数 `func` にコピーします。
6767

68-
改めて注意してください:`sayHi` の後に括弧はありません。もしそれがあった場合`sayHi`*関数自身* ではなく、`func = sayHi()``sayHi()` の呼び出しの結果を `func` に書き込みます。
69-
3. 今や、関数は `sayHi()``func()` 両方で呼ぶことができます
68+
改めて注意してください:`sayHi` の後に括弧はありません。もし括弧があった場合`sayHi`*関数自身* ではなく、`func = sayHi()``sayHi()` の呼び出し結果を `func` に書き込みます。
69+
3. これで、関数は `sayHi()``func()` どちらでも呼ぶことができます
7070

71-
私たちは、1行目で`sayHi` を宣言するために関数式を使うこともできます:
71+
また、1行目で `sayHi` を宣言するのに関数式を使うこともできます:
7272

7373
```js
7474
let sayHi = function() { ... };
@@ -77,7 +77,7 @@ let func = sayHi;
7777
// ...
7878
```
7979

80-
すべて同じように動作します。さらに何が起こっているのか、より明白ですね
80+
すべて同じように動作します。何が起こっているのかより明白ですね
8181

8282

8383
````smart header="なぜ末尾にセミコロンがあるのでしょう?"
@@ -94,8 +94,8 @@ let sayHi = function() {
9494
```
9595
9696
答えはシンプルです:
97-
- コードブロックや `if { ... }`, `for { }`, `function f { }` などの構文構造の末尾に `;` が必要ありません。
98-
- 関数式は文の内側で使われます: `let sayHi = ...;` を値として利用します。それはコードブロックではありません。セミコロン `;` はどんな値であれ文の最後に推奨されています。そのため、ここのセミコロンは関数式自体になんら関係しません、単に文の終わりです。
97+
- コードブロックや `if { ... }`, `for { }`, `function f { }` などの構文構造の末尾には `;` が必要ありません。
98+
- 関数式は文の内側で使われます: `let sayHi = ...;` の値として利用します。これはコードブロックではありません。セミコロン `;` はどんな値であれ文の最後に推奨されています。従って、ここのセミコロンは関数式自体と関係はなく、単に文の終わりです。
9999
````
100100

101101
## コールバック関数
@@ -105,15 +105,15 @@ let sayHi = function() {
105105
私たちは、3つのパラメータを持つ関数 `ask(question, yes, no)` を書きます:
106106

107107
`question`
108-
: 質問のテキスト
108+
: 質問内容
109109

110110
`yes`
111-
: もしも答えが "はい" の場合に実行する関数
111+
: 答えが "はい" の場合に実行する関数
112112

113113
`no`
114-
: もしも答えが "いいえ" の場合に実行する関数
114+
: 答えが "いいえ" の場合に実行する関数
115115

116-
関数は `question` を訪ね、ユーザの回答に合わせて、`yes()` または `no()` を呼びます:
116+
関数は `question` を聞き、ユーザの回答に合わせて、`yes()` または `no()` を呼びます:
117117

118118
```js run
119119
*!*
@@ -135,13 +135,13 @@ function showCancel() {
135135
ask("Do you agree?", showOk, showCancel);
136136
```
137137

138-
これに関して、より短く記述する方法を探す前に、ブラウザ(といくつかのサーバサイドのケース)では、このような関数はかなり普及していることに留意しましょう。実際の実装と上の例の主な違いは、実際の関数は単純な `confirm` よりも、ユーザとやり取りするためにより複雑な方法を利用することです。ブラウザでは、このような関数は、通常良く見える質問ウィンドウに描画されます。しかしそれは別の話です
138+
これをもっと簡単に書く方法を探る前に、ブラウザ(と場合によってはサーバ側)では、このような関数は非常に一般的であること留意しましょう。実際の実装と上の例の主な違いは、実際の関数は単純な `confirm` よりも、より複雑な方法でユーザとやり取りをすることです。ブラウザでは、通常このような関数は見栄えのよい質問ウィンドウを描画します。が、それはまた別の話です
139139

140140
**`ask`の引数は *コールバック関数* または単に *コールバック* と呼ばれます。**
141141

142-
この考え方は、私たちは関数を渡し、それがもし必要であれば後で "呼び戻す" ことを期待します。このケースでは、`showOK` は "はい" のためのコールバックになり、`showCancel` は "いいえ" の回答のためです。
142+
この考え方は、私たちは関数を渡し、それが必要であれば後で "呼び戻す" ことを期待します。このケースでは、`showOK` は "はい" のためのコールバックになり、`showCancel` は "いいえ" の回答のためです。
143143

144-
同じ関数をより短く書くために関数式を使うことが出来ます:
144+
同じ関数をより短く書くために関数式を使うことができます:
145145

146146
```js run no-beautify
147147
function ask(question, yes, no) {
@@ -158,17 +158,17 @@ ask(
158158
*/!*
159159
```
160160

161-
ここでは、関数は `ask(...)` 呼び出しの中で正しく宣言されています。それらは名前を持たないので、*無名* と呼ばれます。
162-
このような関数は `ask` の外側からアクセスできません(変数に割り当てられていないため)、しかしそれはここで欲しいものです
161+
ここでは、関数は `ask(...)` 呼び出しの中で正しく宣言されています。これらは名前を持たないので *無名* と呼ばれます。
162+
このような関数は、変数に割り当てられていないため `ask` の外側からアクセスできません。が、それはここで期待するものです
163163

164-
このようなコードは我々のスクリプトでとても自然に表れます。それは JavaScript の精神に基づいています。
164+
このようなコードはスクリプトの中で自然に現れます。それは JavaScript の精神に基づいています。
165165

166166
```smart header="関数は \"アクション\" を表す値です"
167-
文字列や数値のような通常の値は *データ* を表します
167+
文字列や数値のような通常の値は *データ* を現します
168168
169169
関数は *アクション* として認識されます。
170170
171-
私たちは、変数間でそれを渡し、必要な時に実行させることができます。
171+
変数間で渡し、必要な時に実行させることができます。
172172
```
173173

174174

@@ -198,17 +198,17 @@ ask(
198198

199199
よりささいな違いは、関数がJavaScriptエンジンによって *作られたとき* です。
200200

201-
**関数式は、実行がそれに到達した時に作られ、それ以降、利用可能になります**
201+
**関数式は、実行がそれに到達した時に作られ、それ以降で利用可能になります**
202202

203203
一度実行フローが代入 `let sum = function…` の右辺へ渡ったら -- 関数は作られ、そこから使えるようになります(代入や呼び出しなど)。
204204

205205
関数宣言は異なります
206206

207207
**関数宣言はスクリプト/コードブロック全体で使用できます。**
208208

209-
言い換えると、JavaScriptがスクリプトまたはコードブロックの実行の準備をする時、最初にその中の関数定義を探し、関数を生成します。私たちはそれを "初期化段階" として考えることが出来ます
209+
つまり、JavaScriptがスクリプトまたはコードブロックの実行の準備をする時、最初にその中の関数定義を探し、関数を生成します。それは "初期化段階" と考えることができます
210210

211-
そして、全ての関数宣言が処理されたあと、実行が続けられます。
211+
そして、すべての関数宣言が処理されたあと、実行が続けられます。
212212

213213
結果的に、関数宣言として宣言された関数は、定義された関数よりも早く呼ぶことができます。
214214

@@ -238,13 +238,13 @@ let sayHi = function(name) { // (*) no magic any more
238238
};
239239
```
240240

241-
関数式は、実行がそれに到達した時に作られます。それは行 `(*)` でのみ起こります。遅すぎます。
241+
関数式は、実行がそれに到達した時に作られます。それは行 `(*)` で起こります。遅すぎます。
242242

243243
**関数宣言がコードブロックの中で作られるとき、そのブロックの内側であればどこからでも見えます。しかし、その外側からは見えません。**
244244

245245
必要とされるブロックの中だけでローカル変数を宣言することは、時には便利です。しかし、その機能も問題を引き起こす可能性があります。
246246

247-
例えば、私たちがランタイムの中で得た `age` 変数に依存する関数 `welcome()` を宣言する必要があるとしましょう。そして、しばらくしてから使用することを予定します
247+
例えば、ランタイムの中で得た `age` 変数に依存する関数 `welcome()` を宣言する必要があるとしましょう。そして、しばらくしてから使用する予定だとします
248248

249249
下のコードはうまく動作しません:
250250

@@ -309,7 +309,7 @@ welcome(); // エラー: welcome は定義されていません
309309

310310
`if` の外側で `welcome` を見えるようにするためにはどうしたらよいでしょうか?
311311

312-
正しいアプローチは、関数式を使い、`welcome``if` の外で宣言され、適切なスコープをもつ変数に代入することです。
312+
正しいアプローチは、関数式を使い、`welcome``if` の外で宣言し、適切なスコープをもつ変数に代入することです。
313313

314314
これは、意図したとおりに動作します:
315315

@@ -353,17 +353,17 @@ welcome(); // ok now
353353

354354

355355
```smart header="関数宣言と関数式のどちらを選択するのか?"
356-
経験則として、私たちが関数を宣言する必要があるとき、最初に考えるのは、以前私たちが使った関数宣言構文です。私たちはこれらの関数が宣言される前に呼ぶことができるため、コードを体系化する自由度が増します。
356+
経験則として、関数を宣言する必要があるとき、最初に考えるのは関数宣言構文です。関数が宣言される前に呼ぶことができるため、コードを体系化する自由度が増します。
357357
358358
また、コードの中で、`let f = function(…) {…}` よりも `function f(…) {…}` の方が調べるのが少し簡単です。関数宣言はより "目を引きます"。
359359
360-
...しかし、関数宣言が幾つかの理由で適していない場合(上でみた例)、関数式が使われるべきです
360+
...しかし、関数宣言が幾つかの理由で適していない場合(上でみた例)、関数式を使用するべきです
361361
```
362362

363363

364364
## アロー関数
365365

366-
関数を作成ための、より非常にシンプルで簡潔な構文がもう1つあります。それはしばしば関数式よりも優れています。これは "アロー関数" と呼ばれ、次のようになります:
366+
関数を作成するための、より非常にシンプルで簡潔な構文がもう1つあります。それはしばしば関数式よりも優れています。これは "アロー関数" と呼ばれ、次のようになります:
367367

368368
```js
369369
let func = (arg1, arg2, ...argN) => expression
@@ -439,7 +439,7 @@ welcome(); // ok now
439439
440440
上の例は、`=>` の左から引数を取得し、右側の式を評価しました。
441441
442-
複数の式や文のようにもう少し複雑なものが必要な時があります。それもまた可能ですが、この場合は括弧で囲む必要があります。そして、その中で通常の `return` を使います。
442+
複数の式や文のように、もう少し複雑なものが必要な時があります。それも可能ですが、この場合は括弧で囲む必要があります。そして、その中で通常の `return` を使います。
443443
444444
このようになります:
445445
@@ -457,22 +457,22 @@ alert( sum(1, 2) ); // 3
457457
```smart header="他にもあります"
458458
ここでは、簡潔にするためにアロー関数を賞賛しました。しかし、それだけではありません!!アロー関数は他にも興味深い機能を持っています。後ほどチャプター<info:arrow-functions> で触れます。
459459
460-
現時点では、既にワンライナーの処理やコールバックのためにそれらを使うことが出来ます
460+
今の時点で、我々はすでにワンライナーの処理やコールバック処理のためにアロー関数を使うことができます
461461
```
462462

463463
## サマリ
464464

465-
- 関数は値です。それらは、コード上のどの場所でも、割り当てたり、コピーしたり、宣言することができます
466-
- もしも、関数がメインのコードフローの中で別の文として宣言されていたら、それは "関数宣言" と呼ばれます。
467-
- もしも関数が式の一部として作られたら、それは "関数式" と呼ばれます。
468-
- 関数宣言は、コードブロックが実行される前に処理されます。それらはブロックの中ではどこからでも見えます
465+
- 関数は値です。それらはコード上のどの場所でも、割り当て、コピー、宣言をすることができます
466+
- 関数がメインのコードフローの中で別の文として宣言されていたら、それは "関数宣言" と呼ばれます。
467+
- 関数が式の一部として作られたら、それは "関数式" と呼ばれます。
468+
- 関数宣言は、コードブロックが実行される前に処理されます。ブロックの中ではどこからでも見えます
469469
- 関数式は、実行フローがそれに到達した時に作られます。
470470

471-
ほとんどのケースでは、関数の宣言が必要な場合、関数宣言が望ましいです。なぜなら、それ自身の宣言の前で見えるためです。これにより、コード構成の柔軟性が増し、通常は読みやすくなります。
471+
たいていのケースでは、関数の宣言が必要な場合、関数宣言が望ましいです。なぜなら、それ自身の宣言の前でも利用することができるからです。これにより、コード構成の柔軟性が増し、通常は読みやすくなります。
472472

473473
従って、関数宣言がそのタスクに適さない場合にのみ関数式を使うべきです。このチャプターで幾つかの例を見て来ました、そして今後もっと見ていくでしょう。
474474

475-
アロー関数はワンライナーのために便利です。それらは2つの旨味があります:
475+
アロー関数はワンライナーに対し便利です。2つの種類があります:
476476

477477
1. 括弧無し: `(...args) => expression` -- 右側は式です: 関数はそれを評価しその結果を返します。
478478
2. 括弧あり: `(...args) => { body }` -- 括弧があると、関数内で複数の文を書くことができます、しかし何かを返却する場合には、明確に `return` が必要です。

0 commit comments

Comments
 (0)