From 94be57984724f27323b9c1b5ab2913ff42f91129 Mon Sep 17 00:00:00 2001 From: azu Date: Wed, 26 Dec 2018 10:36:31 +0900 Subject: [PATCH] =?UTF-8?q?refactor(textlint):=20textlint-rule-ja-no-redun?= =?UTF-8?q?dant-expression=E3=81=AE=E6=A4=9C=E7=9F=A5=E3=82=92=E5=85=83?= =?UTF-8?q?=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refs: https://github.com/textlint-ja/textlint-rule-ja-no-redundant-expression/pull/6 --- source/basic/array/README.md | 4 ++-- source/basic/async/README.md | 22 +++++++++++-------- source/basic/class/README.md | 8 +++---- source/basic/condition/README.md | 4 ++-- source/basic/ecmascript/README.md | 2 +- source/basic/function-declaration/README.md | 2 +- source/basic/implicit-coercion/README.md | 8 +++---- source/basic/loop/README.md | 6 ++++- source/basic/object/README.md | 4 ++-- source/basic/operator/README.md | 12 +++++----- source/basic/read-eval-print/README.md | 4 ++-- source/basic/string/README.md | 10 ++++----- source/use-case/ajaxapp/README.md | 2 +- source/use-case/ajaxapp/display/README.md | 2 +- source/use-case/ajaxapp/promise/README.md | 4 ++-- source/use-case/ajaxapp/xhr/README.md | 6 ++--- .../use-case/nodecli/argument-parse/README.md | 2 +- source/use-case/todoapp/entrypoint/README.md | 4 ++-- source/use-case/todoapp/event-model/README.md | 4 ++-- 19 files changed, 59 insertions(+), 51 deletions(-) diff --git a/source/basic/array/README.md b/source/basic/array/README.md index c2ffe4f9a8..98d8eb2fe5 100644 --- a/source/basic/array/README.md +++ b/source/basic/array/README.md @@ -786,7 +786,7 @@ myFunc("a", "b", "c"); ## メソッドチェーンと高階関数 {#method-chain-and-high-order-function} 配列で頻出するパターンとしてメソッドチェーンがあります。 -メソッドチェーンとは名前のとおり、メソッドの呼び出しを行いその結果の値に対してさらにメソッドを呼び出すパターンのことを言います。 +メソッドチェーンとは名前のとおり、メソッドを呼び出した返り値に対してメソッド呼び出しをするパターンのことを言います。 次のコードでは、`Array#concat`メソッドの返り値、つまり配列に対してさらに`concat`メソッドを呼び出すというメソッドチェーンが行われています。 @@ -844,4 +844,4 @@ console.log(versionNames); // => ["ECMAScript 1", "ECMAScript 2", "ECMAScript 3" [ループと反復処理]: ../loop/README.md [immutable-array-prototype]: https://github.com/azu/immutable-array-prototype "azu/immutable-array-prototype: A collection of Immutable Array prototype methods(Per method packages)." [Lodash]: https://lodash.com/ "Lodash" -[Immutable.js]: https://facebook.github.io/immutable-js/ "Immutable.js" \ No newline at end of file +[Immutable.js]: https://facebook.github.io/immutable-js/ "Immutable.js" diff --git a/source/basic/async/README.md b/source/basic/async/README.md index 20eb25e07d..fa6bd336a4 100644 --- a/source/basic/async/README.md +++ b/source/basic/async/README.md @@ -22,7 +22,7 @@ author: azu 同期処理では実行している処理はひとつだけとなるため、とても直感的な動作となります。 一方、同期的にブロックする処理が行われていた場合には問題があります。 -同期処理ではひとつの処理が終わるまで次の処理を行うことができないためです。 +同期処理ではひとつの処理が終わるまで、次の処理へ進むことができないためです。 次のコードの`blockTime`関数は指定した`timeout`ミリ秒だけ無限ループを行い同期的にブロックする処理です。 この`blockTime`関数を呼び出すと、指定時間経過するまで次の処理(次の行)が呼ばれません。 @@ -47,7 +47,7 @@ console.log("この行が呼ばれるまで処理が1秒間ブロックされる このような同期的にブロックするのは、ブラウザでは大きな問題となります。 なぜなら、JavaScriptは基本的にブラウザのメインスレッド(UIスレッドとも呼ばれる)で実行されるためです。 -そのため、JavaScriptで同期的にブロックする処理を行うと他の処理ができなくなるため、画面がフリーズしたような体感を与えてしまいます。 +そのため、JavaScriptで同期的にブロックする処理すると他の処理ができなくなるため、画面がフリーズしたような体感を与えてしまいます。 さきほどの例では1秒間も処理をブロックしているため、1秒間スクロールやクリックなどの他の操作が効かないといった悪影響がでます。 @@ -59,7 +59,7 @@ console.log("この行が呼ばれるまで処理が1秒間ブロックされる また非同期処理はコードを順番に処理していきますが、ひとつの非同期処理が終わるのを待たずに次の処理を評価します。 つまり、非同期処理では同時に実行している処理は複数あります。 -JavaScriptにおいて代表的な非同期処理を行う関数として`setTimeout`関数があります。 +JavaScriptにおいて非同期処理をする代表的な関数として`setTimeout`関数があります。 `setTimeout`関数は`delay`ミリ秒後に、`コールバック関数`を呼び出すようにタイマーへ登録する非同期処理です。 @@ -97,11 +97,15 @@ console.log("2. 同期的な処理を実行します"); このコードを実行した結果のコンソールログは次のようになります。 + + 1. setTimeoutのコールバック関数を10ミリ秒後に実行します 2. 同期的な処理を実行します 3. ブロックする処理を開始します 4. ブロックする処理が完了しました + + このように、非同期処理(`setTimeout`のコールバック関数)は、コードの見た目上の並びとは異なる順番で実行されることがわかります。 ## 非同期処理はメインスレッドで実行される {#async-and-main-thread} @@ -240,7 +244,7 @@ ES2015より前までは、**エラーファーストコールバック**とい つまり、ひとつのコールバック関数で失敗した場合と成功した場合の両方を扱うルールとなります。 -たとえば、Node.jsでは`fs.readFile`関数というファイルシステムからファイルをロードする非同期処理を行う関数があります。 +たとえば、Node.jsでは`fs.readFile`関数というファイルシステムからファイルをロードする非同期処理する関数があります。 指定したパスのデータを読むため、ファイルが存在しない場合やアクセス権限の問題から読み取りに失敗することがあります。 そのため、`fs.readFile`関数の第2引数にわたすコールバック関数にはエラーファーストコールバックスタイルの関数を渡します。 @@ -258,12 +262,12 @@ fs.readFile("./example.txt", (error, data) => { }); ``` -このエラーファーストコールバックはNode.jsでは広く使われ、Node.jsの標準APIにおいても非同期処理を行う関数では利用されています。 +このエラーファーストコールバックはNode.jsでは広く使われ、Node.jsの標準APIにおいても非同期処理する関数では利用されています。 詳しい扱い方については[ユースケース: Node.jsでCLIアプリケーション][]にて紹介します。 実際にエラーファーストコールバックで非同期な例外処理を扱うコードを書いてみましょう。 -次のコードの`dummyFetch`関数は、擬似的なリソースの取得を行う非同期な処理です。 +次のコードの`dummyFetch`関数は、擬似的なリソースの取得する非同期な処理です。 第1引数に任意のパスを受け取り、第2引数にエラーファーストコールバックスタイルの関数を受けとります。 この`dummyFetch`関数は、任意のパスにマッチするリソースがある場合には、第2引数のコールバック関数に`null`とレスポンスオブジェクトを渡して呼び出します。 @@ -1213,7 +1217,7 @@ Promise.race([ このようにPromiseを使うことで非同期処理のさまざまなパターンが形成できます。 より詳しいPromiseの使い方については[JavaScript Promiseの本][]というオンラインで公開されている文書にまとめられています。 -一方でPromiseはただのビルトインオブジェクトであるため、非同期処理間の連携を行うにはPromiseチェーンのように少し特殊な書き方や見た目になります。 +一方でPromiseはただのビルトインオブジェクトであるため、非同期処理間の連携するにはPromiseチェーンのように少し特殊な書き方や見た目になります。 また、エラーハンドリングについても`Promise#catch`メソッドや`Promise#finally`メソッドなど`try...catch`構文とよく似た名前を使います。 しかし、Promiseは構文ではなくただのオブジェクトであるため、それらをメソッドチェーンとして実現しないといけないといった制限があります。 @@ -1354,7 +1358,7 @@ async function asyncMain() { } ``` -普通の処理の流れでは非同期処理を実行した場合にその非同期処理の完了を待つことなく、次の行(次の文)を実行します。 +普通の処理の流れでは、非同期処理を実行した場合にその非同期処理の完了を待つことなく、次の行(次の文)を実行します。 しかし`await`式では非同期処理を実行し完了するまで、次の行(次の文)を実行しません。 そのため`await`式を使うことで非同期処理が同期処理のように上から下へと順番に実行するような処理順で書けます。 @@ -1601,7 +1605,7 @@ fetchResources().then((results) => { }); ``` -Promiseチェーンで`fetchResources`関数書いた場合はコールバックの中で処理を行うためややこしい見た目になりがちです。 +Promiseチェーンで`fetchResources`関数書いた場合は、コールバックの中で処理するためややこしい見た目になりがちです。 一方、Async Functionと`await`式で書いた場合は、取得と追加を順番に行うだけとなりネストがなく見た目はシンプルです。 このようにAsync Functionと`await`式でも非同期処理を同期処理のような見た目で書けます。 diff --git a/source/basic/class/README.md b/source/basic/class/README.md index b6b1dee366..6ec8fdb3d2 100644 --- a/source/basic/class/README.md +++ b/source/basic/class/README.md @@ -114,7 +114,7 @@ class Point { この`Point`クラスのインスタンスを作成するには`new`演算子を使います。 `new`演算子には関数呼び出しと同じように引数を渡すことができます。 `new`演算子の引数はクラスの`constructor`メソッド(コンストラクタ関数)の仮引数に渡されます。 -そして、コンストラクタのなかではインスタンスオブジェクト(`this`)の初期化処理を行います。 +そして、コンストラクタのなかではインスタンスオブジェクト(`this`)の初期化処理します。 {{book.console}} ```js @@ -939,10 +939,10 @@ const child = new Child("引数1", "引数2"); // "Childコンストラクタの処理", "引数1", "引数2" ``` -`class`構文でのクラス定義では、`constructor`メソッド(コンストラクタ)で何も処理を行わない場合は省略できることを紹介しました。 +`class`構文でのクラス定義では、`constructor`メソッド(コンストラクタ)で何も処理しない場合は省略できることを紹介しました。 これは、継承した子クラスでも同じです。 -次のコードでは、`Child`クラスのコンストラクタでは何も処理を行っていません。 +次のコードの`Child`クラスのコンストラクタでは、何も処理していません。 そのため、`Child`クラスの`constructor`メソッドの定義を省略できます。 {{book.console}} @@ -967,7 +967,7 @@ class Child extends Parent { コンストラクタの処理順は親クラスから子クラスへと順番が決まっています。 -`class`構文ではかならず親クラスのコンストラクタ処理(`super()`を呼び)を先に行い、その次に子クラスのコンストラクタ処理を行います。 +`class`構文ではかならず親クラスのコンストラクタ処理(`super()`を呼び)を先に行い、その次に子クラスのコンストラクタ処理へ進みます。 子クラスのコンストラクタでは、`this`を触る前に`super()`で親クラスのコンストラクタ処理を呼び出さないと`SyntaxError`となるためです。 次のコードでは、`Parent`と`Child`でそれぞれインスタンス(`this`)の`name`プロパティに値を書き込んでいます。 diff --git a/source/basic/condition/README.md b/source/basic/condition/README.md index a1b9a75fdb..dfc7aa3ed6 100644 --- a/source/basic/condition/README.md +++ b/source/basic/condition/README.md @@ -50,7 +50,7 @@ if (x > 10) { ``` if文の`条件式`には`true`または`false`といった真偽値以外の値も指定できます。 -真偽値以外の値の場合、その値を暗黙的に真偽値へ変換した評価結果を使い、if文の判定を行います。 +真偽値以外の値の場合、その値を暗黙的に真偽値へ変換してから、条件式として判定をします。 真偽値へ変換した結果が`true`となる値の種類は多いため、逆に変換した結果が`false`となる値を覚えるのが簡単です。JavaScriptでは次の値は`false`に変換され、これらの値は**falsy** と呼ばれます。(「[暗黙的な型変換][]の章」を参照) @@ -253,4 +253,4 @@ switch文のcase節では基本的に`break;`を使いswitch文を抜けるよ - [制御フローとエラー処理 - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Control_flow_and_error_handling) -[暗黙的な型変換]: ../implicit-coercion/README.md \ No newline at end of file +[暗黙的な型変換]: ../implicit-coercion/README.md diff --git a/source/basic/ecmascript/README.md b/source/basic/ecmascript/README.md index 0edf348b2f..6c461901c7 100644 --- a/source/basic/ecmascript/README.md +++ b/source/basic/ecmascript/README.md @@ -7,7 +7,7 @@ author: azu ここまでJavaScriptの基本文法について見ていきましたが、その文法を定めるECMAScriptという仕様自体がどのように変化していくのかを見ていきましょう。 ECMAScriptは[Ecma International][]という団体によって標準化されている仕様です。 -Ecma InternationalはECMAScript以外にもC#やDartなどの標準化作業を行っています。 +Ecma InternationalはECMAScript以外にもC#やDartなどの標準化作業をしています。 Ecma International中のTechnical Committee 39(TC39)という技術委員会が中心となって、ECMAScript仕様についてを議論しています。 この技術委員会はMicrosoft、Mozilla、Google、AppleといったブラウザベンダーやECMAScriptに関心のある企業などによって構成されます。 diff --git a/source/basic/function-declaration/README.md b/source/basic/function-declaration/README.md index 6e3fbf831b..43d34488ea 100644 --- a/source/basic/function-declaration/README.md +++ b/source/basic/function-declaration/README.md @@ -7,7 +7,7 @@ description: 関数の宣言方法とメソッドについて 関数とは、ある一連の手続き(文の集まり)を1つの処理としてまとめる機能です。 関数を利用することで、同じ処理を毎回書くのではなく、一度定義した関数を呼び出すことで同じ処理を実行できます。 -これまで利用してきたコンソール表示を行うConsole APIも関数です。 +これまで利用してきたコンソール表示するConsole APIも関数です。 `console.log`は「受け取った値をコンソールへ出力する」という処理をまとめた関数です。 この章では、関数の定義方法や呼び出し方について見ていきます。 diff --git a/source/basic/implicit-coercion/README.md b/source/basic/implicit-coercion/README.md index 91c4aee4fd..e1ba710f88 100644 --- a/source/basic/implicit-coercion/README.md +++ b/source/basic/implicit-coercion/README.md @@ -9,7 +9,7 @@ author: azu [演算子][]の章にて、等価演算子において**暗黙的な型変換**による意図しない挙動について紹介しました。 > 等価演算子(`==`)はオペランド同士が異なる型の値であった場合に、 -> 同じ型となるように**暗黙的な型変換**してから比較を行います。 +> 同じ型となるように**暗黙的な型変換**してから比較します。 暗黙的な型変換の例として、数値と真偽値の加算を見てみましょう。 多くの言語では、数値と真偽値の加算は型エラーとなり、コンパイルエラーまたは実行時エラーとなります。 @@ -353,7 +353,7 @@ isNaN([]); // => false isNaN(NaN); // => true ``` -同様の処理を行う方法として`Number.isNaN(x)`メソッドがあります。 +同様の処理する方法として`Number.isNaN(x)`メソッドがあります。 実際に値が`NaN`かを判定する際には、`Number.isNaN(x)`メソッドを利用するとよいでしょう。 {{book.console}} @@ -454,7 +454,7 @@ sum(x, y, z); // => Error エラーとなった時に呼ばれる側と呼び出し側でどちらに問題があるのかが明確になります。 この場合は、`sum`関数へ`undefined`な値を渡している呼び出し側に問題があります。 -JavaScriptは、型エラーに対して暗黙的な型変換を行うなど驚くほど許容しています。 +JavaScriptは、型エラーに対して暗黙的な型変換してしまうなど驚くほど許容しています。 そのため、大きなJavaScriptアプリケーションを書く場合は、このような検出しにくいバグを見つけられるように書くことは重要です。 ## 明示的な変換でも解決しないこと {#unsolved-problem} @@ -472,7 +472,7 @@ JavaScriptの型変換は基本的に情報が減る方向へしか変換でき `""`(空文字)はfalsyな値であるため、明示的に`Boolean`コンストラクタ関数で真偽値へ変換できます。 しかし、falsyな値は空文字以外にもあるため、明示的に変換したからといって空文字だけを判定できるわけではありません。 -次のコードでは、明示的な型変換を行っていますが、`0`も**空文字**となってしまい意図しない挙動になっています。 +次のコードでは、明示的な型変換をしていますが、`0`も**空文字**となってしまい意図しない挙動になっています。 {{book.console}} ```js diff --git a/source/basic/loop/README.md b/source/basic/loop/README.md index 2f3a13a3d7..8e1ac51c67 100644 --- a/source/basic/loop/README.md +++ b/source/basic/loop/README.md @@ -21,10 +21,14 @@ while (条件式) while文の実行フローは次のようになります。 最初から`条件式`が`false`である場合は、何も実行せずwhile文は終了します。 + + 1. `条件式` の評価結果が`true`なら処理を続け、`false`なら終了 2. `実行する文`を実行 3. ステップ1へ戻る + + 次のコードでは`x`の値が10未満であるなら、コンソールへ繰り返しログが出力されます。 また、`実行する文`にて、`x`の値を増やし`条件式`が`false`となるようにしています。 @@ -172,7 +176,7 @@ switch文で出てきたものと同様で、処理中のループ文を終了 1つでも偶数があるかが分かればいいため、配列内から最初の偶数を見つけたらfor文での反復処理を終了します。 このような処理はベタ書きせずに、関数として実装するのが一般的です。 -同様の処理を行う `isEvenIncluded` 関数を実装してみます。 +同様の処理をする `isEvenIncluded` 関数を実装してみます。 次のコードでは、break文が実行され、ループを抜けた後にreturn文で結果を返しています。 {{book.console}} diff --git a/source/basic/object/README.md b/source/basic/object/README.md index 6abf93cd89..3049b3d4c7 100644 --- a/source/basic/object/README.md +++ b/source/basic/object/README.md @@ -222,7 +222,7 @@ console.log(object.key); // => "value" ``` このように、プロパティを初期化時以外に追加してしまうと、そのオブジェクトがどのようなプロパティを持っているかがわかりにくくなります。 -そのため、できる限り作成後に新しいプロパティの追加を行わないほうがよいでしょう。 +そのため、できる限り作成後に新しいプロパティの追加しないほうがよいでしょう。 つまり、オブジェクトの作成時のオブジェクトリテラルの中でプロパティを定義することを推奨します。 ### [コラム] constで定義したオブジェクトは変更可能 {#const-and-object} @@ -611,4 +611,4 @@ console.log(cloneObject.nest === object.nest); // => false [ループと反復処理]: ../loop/README.md "ループと反復処理" [変数と宣言]: ../variables/README.md "変数と宣言" [クラス]: ../class/README.md "クラス" -[変数と宣言のconstについて]: ../variables/README.md#const \ No newline at end of file +[変数と宣言のconstについて]: ../variables/README.md#const diff --git a/source/basic/operator/README.md b/source/basic/operator/README.md index d4d041b822..134651cb25 100644 --- a/source/basic/operator/README.md +++ b/source/basic/operator/README.md @@ -5,7 +5,7 @@ author: azu # 演算子 {#operator} 演算子はよく利用する計算を関数やメソッドではなく、記号として表現したものです。 -たとえば、足し算を行う `+` も演算子の一種で、演算子には多くの種類があります。 +たとえば、足し算する `+` も演算子の一種で、演算子には多くの種類があります。 演算子は演算する対象をもちます。この演算子の対象のことを**被演算子(オペランド)**と呼びます。 @@ -351,7 +351,7 @@ console.log(objA == objA); // => true ``` しかし、等価演算子(`==`)はオペランド同士が異なる型の値であった場合に、 -同じ型となるように**暗黙的な型変換**してから比較を行います。 +同じ型となるように**暗黙的な型変換**してから比較します。 そのため、次のような、見た目からは結果を予測できない挙動が多く存在します。 @@ -392,7 +392,7 @@ if (value == null) { ``` このように等価演算子(`==`)を使う例外的なケースはありますが、 -基本的に等価演算子(`==`)は[暗黙的な型変換][]を行うためバグを引き起こしやすいです。 +基本的に等価演算子(`==`)は[暗黙的な型変換][]するためバグを引き起こしやすいです。 そのため、仕組みを理解するまでは常に厳密等価演算子(`===`)を利用することを推奨します。 ### 不等価演算子(`!=`) {#not-equal-operator} @@ -412,7 +412,7 @@ console.log(objA != objB); // => true console.log(objA != objA); // => false ``` -不等価演算子も、等価演算子(`==`)と同様に異なる型のオペランドを比較する際に、暗黙的な型変換を行ってから比較します。 +不等価演算子も、等価演算子(`==`)と同様に異なる型のオペランドを比較する際に、暗黙的な型変換してから比較します。 {{book.console}} ```js @@ -423,7 +423,7 @@ console.log(null != undefined); // => false ``` そのため、不等価演算子(`!=`)は、利用するべきではありません。 -代わりに暗黙的な型変換を行わない厳密不等価演算子(`!==`)を利用します。 +代わりに暗黙的な型変換をしない厳密不等価演算子(`!==`)を利用します。 ### 大なり演算子/より大きい(`>`) {#more-than} @@ -943,4 +943,4 @@ console.log(c); // => 3 [暗黙的な型変換]: ../implicit-coercion/README "暗黙的な型変換について解説する章" [^1]: カンマ演算子を活用したテクニックとしてindirect callというものがあります。 -[演算子の優先順序]: https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table "演算子の優先順位 - JavaScript | MDN" \ No newline at end of file +[演算子の優先順序]: https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table "演算子の優先順位 - JavaScript | MDN" diff --git a/source/basic/read-eval-print/README.md b/source/basic/read-eval-print/README.md index 4f18a98ada..72c347902e 100644 --- a/source/basic/read-eval-print/README.md +++ b/source/basic/read-eval-print/README.md @@ -74,7 +74,7 @@ Shift + Enterで改行して複数行の入力もできます。 注意点としては、REPLではそのREPLを終了するまで`const`キーワードなどで宣言した変数が残り続けます。 たとえば、`const`での変数宣言は同じ変数名を二度定義できないというルールでした。 -そのため1行づつ実行しても同じ変数名の定義を行うと構文エラー(`SyntaxError`)となります。 +そのため1行づつ実行しても同じ変数名の定義すると構文エラー(`SyntaxError`)となります。 ``` » const bookTitle = "JavaScriptの本"; @@ -123,7 +123,7 @@ REPLでは自動で評価結果のコンソール表示まで行いますが、J ## Console API {#console-api} -JavaScriptの多くの実行環境では、Console APIが**コンソール表示**を行うAPIとなっています。 +JavaScriptの多くの実行環境では、Console APIが**コンソール表示**するAPIとなっています。 `console.log(引数)`の引数にコンソール表示したい値を入れることで、評価結果がコンソールに表示されます。 先ほどの`index.js`の中身を次のように書きかえます。 diff --git a/source/basic/string/README.md b/source/basic/string/README.md index 9872f5ccd2..18b78e2cc8 100644 --- a/source/basic/string/README.md +++ b/source/basic/string/README.md @@ -59,7 +59,7 @@ const name = "JavaScript"; console.log("Hello " + name + "!");// => "Hello JavaScript!" ``` -特定の書式に値を埋め込みために文字列結合を行う場合には、 +特定の書式に値を埋め込みために文字列結合する場合には、 テンプレートリテラルを使うとより宣言的に書くことができます。 テンプレートリテラルは `` ` ``(バッククオート)で文字列を作成できる点は、`"`(ダブルクオート)や`'`(シングルクオート)と同じです。 @@ -302,7 +302,7 @@ for (const codePoint of string) { 絵文字などサロゲートペアを含む文字列をそれぞれの**Code Unit**で分解すると、加工して結合すると化けてしまうなどの問題が発生しやすいです。 Iteratorを利用すればサロゲートペアもそれぞれの**Code Point**で扱うことができます。 -しかし、JavaScriptにおいて、見た目どおりの**文字**ごとに処理を行う標準的な方法は用意されていません。 +しかし、JavaScriptにおいて、見た目どおりの**文字**ごとに処理する標準的な方法は用意されていません。 結合文字などを考慮した**文字**について、詳しくは[JavaScript has a Unicode problem · Mathias Bynens][]を参照してください。 ## 文字列の長さ {#length} @@ -370,7 +370,7 @@ console.log("JS" === "ES"); // => false `>`、`、`、`>=`、`<=`など大小の関係演算子で文字列同士を比較することもできます。 これらの関係演算子も、文字列の要素であるCode Unitの数値を先頭から順番に比較します。 -しかし、これらの関係演算子は暗黙的な型変換を行うため事前に文字列同士であるかのチェックが必要です。 +しかし、これらの関係演算子は暗黙的な型変換するため、事前に文字列同士であるかのチェックが必要です。 文字列からCode Unitの数値を取得するには`String#charCodeAt`メソッドを利用します。 @@ -956,7 +956,7 @@ URLを扱うものとしてブラウザ上のAPIである[URL][]オブジェク ### タグ付きテンプレート関数 {#tagged-template-function} -文字列操作を行う場合にコンテキストをもつ文字列では気をつける必要があります。 +URLやパスのようにコンテキストをもつ文字列では、文字列操作に気をつける必要があります。 しかし、文字列処理をする際に毎回関数で囲んで書くとコードの見た目が分かりにくい場合もあります。 次のようなユーザー入力を受け取り構築されるURLを考えてみましょう。 @@ -1071,7 +1071,7 @@ console.log(escapedURL); // => "https://example.com/search?q=A%26B&sort=desc" ## おわりに {#string-summary} この章では、JavaScriptにおける文字列とは何かやUnicodeとの関係について紹介しました。 -文字列処理を行うStringメソッドにはさまざまなものがあり、正規表現との組み合わせ使うものも含まれます。 +文字列処理するStringメソッドにはさまざまなものがあり、正規表現との組み合わせ使うものも含まれます。 正規表現については、正規表現のみでひとつの本が作れるようなJavaScript言語内にある別言語です。 詳細は[正規表現 - JavaScript | MDN][]などを参照してください。 diff --git a/source/use-case/ajaxapp/README.md b/source/use-case/ajaxapp/README.md index a75019a17b..b95533a96c 100644 --- a/source/use-case/ajaxapp/README.md +++ b/source/use-case/ajaxapp/README.md @@ -4,7 +4,7 @@ author: laco # ユースケース: Ajax通信 {#usecase-ajax} -ここではウェブブラウザ上でAjax通信を行うユースケースとして、GitHubのユーザーIDからプロフィール情報を取得するアプリケーションを作成します。 +ここではウェブブラウザ上でAjax通信するユースケースとして、GitHubのユーザーIDからプロフィール情報を取得するアプリケーションを作成します。 作成するアプリケーションは次の要件を満たすものとします。 diff --git a/source/use-case/ajaxapp/display/README.md b/source/use-case/ajaxapp/display/README.md index 800b49b8f0..f88aadaac9 100644 --- a/source/use-case/ajaxapp/display/README.md +++ b/source/use-case/ajaxapp/display/README.md @@ -93,7 +93,7 @@ JavaScriptによってHTML要素をDOMに追加する方法は、大きく分け ひとつは、今回のようにHTML文字列を[Element#innerHTML][]プロパティにセットする方法です。 もうひとつは、文字列ではなく[Element][]オブジェクトを生成して[手続き的にツリー構造を構築する][]方法です。 後者はセキュリティ的に安全ですが、コードは少し冗長になります。 -今回は`Element#innerHTML`プロパティを使いつつ、セキュリティのための処理を行うこととします。 +今回は`Element#innerHTML`プロパティを使いつつ、セキュリティのためのエスケープ処理を行うこととします。 ## HTML文字列をエスケープする {#escape-html} diff --git a/source/use-case/ajaxapp/promise/README.md b/source/use-case/ajaxapp/promise/README.md index f9e0830f39..6563010cd6 100644 --- a/source/use-case/ajaxapp/promise/README.md +++ b/source/use-case/ajaxapp/promise/README.md @@ -10,7 +10,7 @@ author: laco ## 関数の分割 {#split-function} まずは、大きくなりすぎた`getUserInfo`関数を整理しましょう。 -この関数では、XHRを使ったデータの取得・HTML文字列の組み立て・組み立てたHTMLの表示を行っています。 +この関数では、XHRを使ったデータの取得・HTML文字列の組み立て・組み立てたHTMLの表示しています。 そこで、HTML文字列を組み立てる`createView`関数とHTMLを表示する`displayView`関数を作り、処理を分割します。 また、後述するエラーハンドリングを行いやすくするため、アプリケーションにエントリポイントを設けます。 @@ -63,7 +63,7 @@ function displayView(view) { ## XHRをPromiseでラップする {#wrap-xhr} 次に、`getUserInfo`関数で行っているXHRの処理を整理します。 -これまではXHRのコールバック関数の中で処理を行っていましたが、これを**Promise**を使った処理に書き換えます。 +これまではXHRのコールバック関数の中で処理していましたが、これを**Promise**を使った処理に書き換えます。 コールバック関数を使うと、ソースコードのネストが深くなったり、例外処理が複雑になったりします。 Promiseを用いることで、可読性を保ちながらエラーハンドリングを簡単に行えます。 diff --git a/source/use-case/ajaxapp/xhr/README.md b/source/use-case/ajaxapp/xhr/README.md index 03938d0451..8249c253c0 100644 --- a/source/use-case/ajaxapp/xhr/README.md +++ b/source/use-case/ajaxapp/xhr/README.md @@ -5,8 +5,8 @@ author: laco # HTTP通信 {#http-communication} アプリケーションが実行できるようになったので、次はGitHubのAPIを呼び出す処理を実装していきます。 -当然ですが、GitHubのAPIを呼び出すためにはHTTP通信を行う必要があります。 -ウェブブラウザ上でJavaScriptからHTTP通信を行うには`XMLHttpRequest`という機能を使います。 +当然ですが、GitHubのAPIを呼び出すためにはHTTP通信する必要があります。 +ウェブブラウザ上で、JavaScriptからHTTP通信するには`XMLHttpRequest`という機能を使います。 ## `XMLHttpRequest` {#xml-http-request} @@ -41,7 +41,7 @@ GitHubのAPIに対してHTTPリクエストを送信しましたが、まだレ 非同期的なXHRの場合、レスポンスはXHRが発火するイベントのコールバック内で受け取れます。 実はXHRにはHTTP通信を同期的に実行するモードも存在しますが、一般的にはXHRを同期的に行うことはありません。 なぜならWebブラウザ上で実行されるJavaScriptはシングルスレッドであり、 -HTTP通信を行っている間はすべての処理がブロックされてしまうからです。 +HTTP通信している間は、すべての処理がブロックされてしまうからです。 そもそも本章のテーマでもある**AJAX**の根幹はAsynchronous(非同期的)であることなので、 ここで登場するXHRはすべて非同期的とします。 diff --git a/source/use-case/nodecli/argument-parse/README.md b/source/use-case/nodecli/argument-parse/README.md index 6b33b868ca..d11f6a8287 100644 --- a/source/use-case/nodecli/argument-parse/README.md +++ b/source/use-case/nodecli/argument-parse/README.md @@ -11,7 +11,7 @@ author: laco コマンドライン引数を扱う前に、まずは`process`オブジェクトについて触れておきます。 `process`オブジェクトはNode.js実行環境のグローバル変数のひとつです。 -`process`オブジェクトが提供するのは、現在のNode.jsの実行プロセスについて、情報の取得と操作を行うAPIです。 +`process`オブジェクトが提供するのは、現在のNode.jsの実行プロセスについて、情報の取得と操作をするAPIです。 詳細は[公式ドキュメント](https://nodejs.org/dist/latest-v6.x/docs/api/process.html#process_process)を参照してください。 コマンドライン引数へのアクセスを提供するのは、`process`オブジェクトの`argv`プロパティで、文字列の配列になっています。 diff --git a/source/use-case/todoapp/entrypoint/README.md b/source/use-case/todoapp/entrypoint/README.md index 42c0c5de8e..5ae8c2f0f7 100644 --- a/source/use-case/todoapp/entrypoint/README.md +++ b/source/use-case/todoapp/entrypoint/README.md @@ -181,8 +181,8 @@ App initialized このエラーがでているということは、`import`宣言を使える条件を満たしていないということです。 つまり、`import`宣言がトップレベルではない所に書かれている、またはモジュールではない実行コンテキストで実行されているということです。 -`import`宣言がトップレベルではない所に書かれているというのは、関数の中などに`import`宣言を行っています。 -この場合は`import`宣言をトップレベル(ファイルの直下)に移動させてみてください。 +関数の中などに`import`宣言していると、`import`宣言がトップレベルではないためエラーが発生します。 +この場合は`import`宣言をトップレベル(プログラムの直下)に移動させてみてください。 モジュールではない実行コンテキストで実行されているというのは、裏を返せば実行コンテキストがScriptとなっているということです。 JavaScriptには実行コンテキストとしてScriptとModuleがあります。 diff --git a/source/use-case/todoapp/event-model/README.md b/source/use-case/todoapp/event-model/README.md index db21feb9b1..1c6fba4df7 100644 --- a/source/use-case/todoapp/event-model/README.md +++ b/source/use-case/todoapp/event-model/README.md @@ -49,7 +49,7 @@ TodoリストにはTodoアイテムを追加できるので`TodoListModel#addIte このようにTodoリストをクラスで表現する際にオブジェクトがどのような処理や状態をもつかを考え実装します。 このようにモデルを考え、先ほどの操作と表示の間にモデルを入れることを考えてみます。 -「フォームを入力し送信」という**操作**を行った場合、`TodoListModel`という**モデル**に対して`TodoItemModel`を追加します。 +「フォームを入力し送信」という**操作**した場合には、`TodoListModel`という**モデル**に対して`TodoItemModel`を追加します。 そして、`TodoListModel`からアイテムの一覧を取得し、DOMを組み立て**表示**を更新します。 先ほどの表にモデルをいれてみます。 @@ -177,7 +177,7 @@ Node.jsでは`events`と呼ばれるモジュールでAPIは異なりますが [import, "src/model/TodoListModel.example.js"](./event-emitter/src/model/TodoListModel.example.js) これでTodoリストに必要なそれぞれのモデルクラスが作成できました。 -次はこれらのモデルを使い表示の更新を行ってみましょう。 +次はこれらのモデルを使い、表示の更新をしてみましょう。 ## モデルを使って表示を更新する {#model-update-view}