Skip to content

Commit 26d76e3

Browse files
committed
GitBook: [master] 124 pages modified
1 parent 644a2e7 commit 26d76e3

22 files changed

+330
-329
lines changed

SUMMARY.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111
* [クロージャ](recap/closure.md)
1212
* [Number型](recap/number.md)
1313
* [Truthy](recap/truthy.md)
14-
* [次世代のJavaScript機能](future-javascript/README.md)
14+
* [モダンなJavaScriptの機能](future-javascript/README.md)
1515
* [クラス](future-javascript/classes/README.md)
1616
* [Classes Emit](future-javascript/classes/classes-emit.md)
1717
* [アロー関数](future-javascript/arrow-functions.md)
18-
* [残余引数](future-javascript/rest-parameters.md)
18+
* [残余引数(Restパラメータ)](future-javascript/rest-parameters.md)
1919
* [let](future-javascript/let.md)
2020
* [const](future-javascript/const.md)
2121
* [分割代入](future-javascript/destructuring.md)

future-javascript/README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# 次世代のJavaScript機能
1+
# モダンなJavaScriptの機能
22

3-
TypeScriptが提供する素晴らしいメリットの1つは、古い\(ES3およびES5レベルの\)JavaScript実行環境\(IE9やNode.jsなど\)で、新しいJavaScript\(ES6以降\)の機能を使用できることです。ここでは、これらの新しいJavaScriptの機能が便利である理由を詳しく説明します。その後で、TypeScriptでそれらがどのように実装されているかを説明します。
3+
TypeScriptが提供する素晴らしいメリットの1つは、古い\(ES3およびES5レベルの\)JavaScript実行環境\(IE9やNode.jsなど\)で、新しいJavaScript\(ES6以降\)の機能を使用できることです。ここでは、これらのモダンなJavaScriptの機能が便利である理由を詳しく説明します。その後で、TypeScriptでそれらがどのように実装されているかを説明します。
44

5-
注: これらの機能すべてがJavaScriptにすぐ追加されるとは限りません。しかし、これらの機能を使うことにより、クリーンなコードが書きやすくなり、かつ、メンテナンスしやすくなります。また、あなたのプロジェクトにとって必要ないものを無視していただくことは自由です。しかし、最終的には、それらのほとんどを使うことになるでしょう
5+
注: これらの機能すべてがJavaScriptにすぐ追加されるとは限りません。しかし、これらの機能を使うことにより、メンテナンスしやすく、クリーンなコードを書くことができます。あなたのプロジェクトに必要ないものは無視していただいて問題ありません。しかし、最終的には、ほとんどの機能を使うことになるでしょう
66

future-javascript/arrow-functions.md

+7-7
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,17 @@
44

55
アロー関数は、可愛いらしく_fat arrow_\(なぜなら`->`は細く `=>`は太い\)、または_lambda関数_\(他の言語でそう名付けられているため\)とも呼ばれます。一般的に利用される機能のひとつは、このアロー関数`()=> something`です。これを使う理由は次の通りです:
66

7-
1. `function`を何度も打ち込まなくて済む
8-
2. `this`の意味をレキシカルスコープで捕捉する
9-
3. `arguments`の意味をレキシカルスコープで捕捉する
7+
1. `function`を何度もタイプしなくて済む
8+
2. `this`の参照をレキシカルスコープで捕捉する
9+
3. `arguments`の参照をレキシカルスコープで捕捉する
1010

11-
関数型であると公言する言語と比べると、JavaScriptでは`function`を頻繁に打ち込まなければならない傾向があります。アロー関数を使うと、関数をシンプルに作成できます
11+
関数型言語と比べると、JavaScriptでは`function`を頻繁に打ち込まなければならない傾向があります。アロー関数を使うと、関数をシンプルに作成できます
1212

1313
```typescript
1414
var inc = (x)=>x+1;
1515
```
1616

17-
`this`はJavaScriptにおいて昔から頭痛の種でした。 ある賢い人はかつて「私は`this`の意味をすぐに忘れるJavaScriptが嫌いだ」と言いました。アロー関数は、それを囲んだコンテキストから`this`を捕捉します。純粋なJavaScriptだけで書かれたクラスを使って考えてみましょう:
17+
`this`はJavaScriptにおいて昔から頭痛の種でした。 ある賢い人は「`this`の意味をすぐに忘れるJavaScriptが嫌いだ」と言いました。アロー関数は、それを囲んだコンテキストから`this`を捕捉します。純粋なJavaScriptだけで書かれたクラスを使って考えてみましょう:
1818

1919
```typescript
2020
function Person(age) {
@@ -29,7 +29,7 @@ setTimeout(person.growOld,1000);
2929
setTimeout(function() { console.log(person.age); },2000); // 1, should have been 2
3030
```
3131

32-
このコードをブラウザで実行すると、関数内の`this``window`を指します。なぜなら、`window``growOld`関数を実行しているからです。修正方法は、アロー関数を使うことです:
32+
このコードをブラウザで実行すると、関数内の`this``window`を参照します。なぜなら、`window``growOld`関数を実行しているからです。修正方法は、アロー関数を使うことです:
3333

3434
```typescript
3535
function Person(age) {
@@ -60,7 +60,7 @@ setTimeout(person.growOld,1000);
6060
setTimeout(function() { console.log(person.age); },2000); // 2
6161
```
6262

63-
TypeScriptを使っているので、はるかに快適な構文で書けます。アロー関数とクラスは、組み合わせることができます:
63+
TypeScriptを使っているので、はるかに快適な構文で書けます。アロー関数とクラスは、組み合わせて利用できます:
6464

6565
```typescript
6666
class Person {

future-javascript/async-await.md

+15-17
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
# async await
22

3-
> [同内容をカバーするPRO eggheadのビデオコース](https://egghead.io/courses/async-await-using-typescript)
4-
5-
思考実験として、次のことを想像してみてください: `await` キーワードがPromiseに対して使われた場合、JavaScriptコードの実行を一時停止する。そして、その関数から返されたPromiseが完了した場合にだけ、コードの実行が再開される。そのように、JavaScriptランタイムに指示する方法を想像してみてください:
3+
思考実験として、次のことを想像してみてください: `await` のキーワードがPromiseに対して使われた場合、JavaScriptコードの実行を一時停止します。そして、その関数から返されたPromiseが完了した場合にだけ、コードの実行が再開されます。このようにJavaScriptランタイムを制御する方法を想像してみてください:
64

75
```typescript
8-
// Not actual code. A thought experiment
6+
// 実際のコードではありません。ただの思考実験です。
97
async function foo() {
108
try {
119
var val = await getMeAPromise();
@@ -28,11 +26,11 @@ Promiseが完了したとき、次の処理を続けます
2826
* 関数の内側に値を入れられること
2927
* 関数の内側に例外を投げられること
3028

31-
これはまさにジェネレータが可能にしたことです!上記の思考実験は、TypeScript / JavaScript の`async`/`await`の実装に使われています。それらの内側の仕組みは、単にジェネレータを使っているのです。
29+
これはまさにジェネレータが可能にしたことです上記の思考実験は、TypeScript / JavaScript の`async`/`await`の実装に使われています。それらの内側の仕組みは、単にジェネレータを使っているのです。
3230

3331
## 生成されたJavaScript
3432

35-
これを理解する必要はありませんが、[ジェネレータ](generators.md)のことを知っていれば、かなり簡単です。関数`foo`は次のように単純にラップされたもので実現できます
33+
これを理解する必要はありませんが、[ジェネレータ](generators.md)のことを知っていれば、かなり簡単です。関数`foo`は次のように単純に囲んだもので実現できます
3634

3735
```typescript
3836
const foo = wrapToReturnPromise(function* () {
@@ -46,15 +44,15 @@ const foo = wrapToReturnPromise(function* () {
4644
});
4745
```
4846

49-
この`wrapToReturnPromise`は単にジェネレータ関数を実行して`generator`を取得します。そして、`generator.next()`を使います。返り値が`promise`なら、その`promise``then`+`catch`し、結果に応じて `generator.next(result)` または `generator.throw(error)` を呼び出します。それだけです!
47+
この`wrapToReturnPromise`は単にジェネレータ関数を実行して`generator`を取得します。そして、`generator.next()`を使います。返り値が`promise`なら、その`promise``then`+`catch`し、結果に応じて `generator.next(result)` または `generator.throw(error)` を呼び出します。それだけです
5048

5149
## TypeScriptにおける Async Await のサポート
5250

53-
**Async - Await**[TypeScript1.7以降](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-1-7.html)でサポートされています。非同期関数の先頭に_async_キーワードが付きます。 _await_は、非同期関数の戻り値promiseが完了し、_Promise_から値を取得するまで実行を中断します。 以前は、**ターゲットがES6**の場合のみサポートしており、**ES6ジェネレータ**に直接トランスパイルしていました。
51+
**Async - Await**[TypeScript1.7以降](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-1-7.html)でサポートされています。非同期関数の先頭に_async_キーワードが付きます。 _await_は、非同期関数の戻り値promiseが完了し、_Promise_から値を取得するまで実行を中断します。 以前は、**ターゲットがES6以降**の場合のみサポートしており、**ES6のジェネレータ**に直接トランスパイルしていました。
5452

55-
**TypeScript2.1**は、[ES3とES5のランタイムにAsync/Await機能を追加](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-1.html)しました。これは、あなたがブラウザの環境に関係なく、それを利用できるということを意味しています。TypeScript 2.1以降、Promiseのためのポリフィルがグローバルに追加されたことにより、多くのブラウザでasync/awaitがサポートされています。
53+
**TypeScript2.1**は、[ES3とES5のランタイムにAsync/Await機能を追加](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-1.html)しました。これが意味することは、ブラウザの環境に関わらず、Async/Awaitを利用できるということです。TypeScript 2.1以降、Promiseのためのポリフィルがグローバルに追加されたことにより、多くのブラウザでasync/awaitがサポートされています。
5654

57-
この例のコードを見て、TypeScriptのasync/await記法がどのように機能するかを理解してください
55+
このコードの例を見て、TypeScriptのasync/awaitがどのように動作するかを理解してください
5856

5957
```typescript
6058
function delay(milliseconds: number, count: number): Promise<number> {
@@ -65,12 +63,12 @@ function delay(milliseconds: number, count: number): Promise<number> {
6563
});
6664
}
6765

68-
// async function always returns a Promise
66+
// async関数は常にPromiseを返します
6967
async function dramaticWelcome(): Promise<void> {
7068
console.log("Hello");
7169

7270
for (let i = 0; i < 5; i++) {
73-
// await is converting Promise<number> into number
71+
// awaitは、Promise<number>をnumberに変換します
7472
const count:number = await delay(500, i);
7573
console.log(count);
7674
}
@@ -81,7 +79,7 @@ async function dramaticWelcome(): Promise<void> {
8179
dramaticWelcome();
8280
```
8381

84-
**ES6へのトランスパイル結果\(--target es6\)**
82+
**ES6へのコンパイル結果\(--target es6\)**
8583

8684
```javascript
8785
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
@@ -99,12 +97,12 @@ function delay(milliseconds, count) {
9997
}, milliseconds);
10098
});
10199
}
102-
// async function always returns a Promise
100+
// async関数は常にPromiseを返します
103101
function dramaticWelcome() {
104102
return __awaiter(this, void 0, void 0, function* () {
105103
console.log("Hello");
106104
for (let i = 0; i < 5; i++) {
107-
// await is converting Promise<number> into number
105+
// awaitは、Promise<number>をnumberに変換します
108106
const count = yield delay(500, i);
109107
console.log(count);
110108
}
@@ -116,7 +114,7 @@ dramaticWelcome();
116114

117115
完全な例を [ここ](https://cdn.rawgit.com/basarat/typescript-book/705e4496/code/async-await/es6/asyncAwaitES6.js) で見ることができます。
118116

119-
**ES5へのトランスパイル結果\(--target es5\)**
117+
**ES5へのコンパイル結果\(--target es5\)**
120118

121119
```javascript
122120
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
@@ -193,5 +191,5 @@ dramaticWelcome();
193191

194192
完全な例を [ここ](https://cdn.rawgit.com/basarat/typescript-book/705e4496/code/async-await/es5/asyncAwaitES5.js) で見ることができます。
195193

196-
**注意**:ES6、ES5のどちらをターゲットにする場合でも、ランタイムがグローバルにECMAScriptに準拠したPromiseの機能を持っていることを確認する必要があります。Promiseのためにポリフィルを用意する必要があるかもしれません。また、libフラグを "dom", "es2015"もしくは"dom", "es2015.promise", "es5"のように設定することで、TypeScriptがPromiseの存在を認識できるようにする必要があります。 **各ブラウザのPromiseサポート\(ネイティブ実装およびポリフィル\)の有無を** [**ここ**](https://kangax.github.io/compat-table/es6/#test-Promise) **で確認できます。**
194+
**注意**:ES6、ES5のどちらをターゲットにする場合でも、ランタイムがグローバルにECMAScriptに準拠したPromiseの機能を持っていることを確認する必要があります。Promiseのためにポリフィルを用意する必要があるかもしれません。また、libフラグを "dom", "es2015"もしくは"dom", "es2015.promise", "es5"のように設定することで、TypeScriptがPromiseの存在を認識できるようにする必要があります。 **各ブラウザのPromiseサポート\(ネイティブ実装およびポリフィル\)の有無を** [**このサイト**](https://kangax.github.io/compat-table/es6/#test-Promise) **で確認できます。**
197195

0 commit comments

Comments
 (0)