「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > すべての Node 開発者が習得する必要がある JavaScript の概念

すべての Node 開発者が習得する必要がある JavaScript の概念

2024 年 11 月 2 日に公開
ブラウズ:804

Node.js は、バックエンドで JavaScript を利用できるため、すぐに Web アプリやシステム ソフトウェアを構築するための標準になりました。 Express などの人気のあるフレームワークや Webpack などのツールが、その普及に貢献しています。 DenoBun などの競合他社は存在しますが、Node は依然として主要なサーバーサイド JavaScript プラットフォームです。

JavaScript のマルチパラダイムの性質により、さまざまなプログラミング スタイルが可能になりますが、スコープやオブジェクトの変更などのリスクも伴います。末尾呼び出しの最適化が欠如しているため、大規模な再帰反復は危険であり、Node のシングルスレッド アーキテクチャでは効率を高めるために非同期コードが必要です。課題はありますが、JavaScript の主要な概念とベスト プラクティスに従うことは、Node.js 開発者がスケーラブルで効率的なコードを作成するのに役立ちます。

1. JavaScript クロージャー

JavaScript のクロージャは、外部関数が制御を返した後でも、外部関数のスコープにアクセスできる内部関数です。クロージャは、内部関数の変数をプライベートにします。 関数型プログラミングの人気が爆発的に高まり、クロージャは Node 開発者キットの重要な部分となっています。以下は JavaScript でのクロージャーの簡単な例です:

JavaScript concepts every Node developer must master

  • 変数 count には外部関数が割り当てられます。外側の関数は 1 回だけ実行され、カウンターがゼロに設定され、内側の関数が返されます。 _counter 変数には内部関数からのみアクセスできるため、プライベート変数のように動作します。
  • ここでの例は高階関数 (またはメタ関数、別の関数を受け取るか返す関数) です。クロージャは他の多くのアプリケーションでも使用されています。クロージャは、別の関数内で関数を定義すると常に発生し、内部関数は独自のスコープと親スコープへのアクセスの両方を取得します。つまり、内部関数は外部変数を「見る」ことができますが、その逆はできません。
  • これは、map(innerFunction) のような関数型メソッドでも便利です。innerFunction は、外側のスコープで定義された変数を利用できます。

2. JavaScript プロトタイプ

すべての JavaScript 関数には、プロパティとメソッドをアタッチするために使用されるプロトタイプ プロパティがあります。このプロパティは列挙可能ではありません。これにより、開発者はオブジェクトにメソッドやメンバー関数をアタッチできるようになります。 JavaScript は、プロトタイプ プロパティを介した継承のみをサポートします。継承されたオブジェクトの場合、プロトタイプ プロパティはオブジェクトの親を指します。関数にメソッドを付加する一般的なアプローチは、次に示すようにプロトタイプを使用することです:

JavaScript concepts every Node developer must master

最新の JavaScript は非常に洗練されたクラス サポートを備えていますが、内部では依然としてプロトタイプ システムを使用しています。これが言語の柔軟性の多くの源です。

3.ハッシュ名を使用したプライベート プロパティの定義

昔は、変数がプライベートであることを示すために、変数の前にアンダースコアを付けるという規則が使用されていました。ただし、これは単なる提案であり、プラットフォームによって強制される制限ではありません。最新の JavaScript は、クラスに ハッシュタグのプライベート メンバーとメソッド を提供します:

JavaScript concepts every Node developer must master

プライベート ハッシュ名は JavaScript の新しい、非常に歓迎される機能です。最近の Node バージョンとブラウザはこれをサポートしており、Chrome devtools を使用すると、プライベート変数に直接アクセスできるので便利です。

4.クロージャを使用したプライベート プロパティの定義

JavaScript のプロトタイプ システムにおけるプライベート プロパティの欠如を回避するために時々見かけるもう 1 つのアプローチは、クロージャーを使用することです。最新の JavaScript では、上の例に示すように、ハッシュタグ プレフィックスを使用してプライベート プロパティを定義できます。ただし、これは JavaScript プロトタイプ システムでは機能しません。また、これはコードでよく見られるトリックであり、その動作を理解することが重要です。

クロージャを使用してプライベート プロパティを定義すると、プライベート変数をシミュレートできます。プライベート プロパティにアクセスする必要があるメンバー関数は、オブジェクト自体で定義する必要があります。クロージャを使用してプライベート プロパティを作成するための構文は次のとおりです:

JavaScript concepts every Node developer must master

5. JavaScript モジュール

かつて、JavaScript にはモジュール システムがなかったため、開発者は機能するものを用意するための巧妙なトリック (モジュール パターンと呼ばれる) を考案しました。 JavaScript が進化するにつれて、CommonJS include 構文と ES6 require 構文という 1 つではなく 2 つのモジュール システムが生成されました。

Node は従来 CommonJS を使用していましたが、ブラウザーは ES6 を使用していました。ただし、Node の最近のバージョン (ここ数年) は ES6 もサポートしています。現在のトレンドは ES6 モジュールを使用することであり、いつか JavaScript 全体で使用できるモジュール構文が 1 つだけになるでしょう。 ES6 は次のようになります (デフォルトのモジュールをエクスポートしてからインポートします):

JavaScript concepts every Node developer must master

CommonJS は引き続き表示され、モジュールをインポートするためにそれを使用する必要がある場合があります。 CommonJS を使用してデフォルト モジュールをエクスポートしてインポートする様子は次のとおりです:

JavaScript concepts every Node developer must master

6.エラー処理

使用している言語や環境に関係なく、エラー処理は不可欠であり、避けられません。ノードも例外ではありません。エラーに対処する基本的な方法は 3 つあります。try/catch ブロック、新しいエラーのスロー、および on() ハンドラーです。

try/catch を含むブロックは、問題が発生したときにエラーをキャプチャするための実証済みの手段です:

JavaScript concepts every Node developer must master

この場合、console.error を使用してエラーをコンソールに記録します。エラーをスローして次のハンドラーに渡すこともできます。これにより、コード フローの実行が中断されることに注意してください。つまり、現在の実行が停止し、スタック上の次のエラー ハンドラーが引き継ぎます:

JavaScript concepts every Node developer must master

Modern JavaScript では、スタック トレースを確認するための Error.stack など、Error オブジェクトに多数の便利なプロパティが提供されています。上の例では、コンストラクター引数を使用して Error.message プロパティと Error.cause を設定しています。

エラーが見つかるもう 1 つの場所は、

.then() で通常の結果を処理する非同期コード ブロックです。この場合、Promise がエラーを返す方法に応じて、on(‘error’) ハンドラーまたは onerror イベントを使用できます。場合によっては、API は通常の値とともに 2 番目の戻り値としてエラー オブジェクトを返します。 (非同期呼び出しで await を使用する場合は、try/catch でラップしてエラーを処理できます。) 非同期エラーを処理する簡単な例を次に示します。

JavaScript concepts every Node developer must master

何があっても、間違いを決して鵜呑みにしないでください。 誰かがコピーして貼り付ける可能性があるため、ここでは示しません。基本的に、エラーを見つけて何もしなかった場合、プログラムは、何か問題が発生したことを示す明らかな兆候もなく、静かに動作を続けます。ロジックは破綻し、何も入っていない catch ブロックが見つかるまで考え続けることになります。 (catch ブロックなしで

finally{} ブロックを指定すると、エラーが無視されることに注意してください。)

7. JavaScript カリー化

カリー化は、関数をより柔軟にする方法です。カリー化された関数を使用すると、関数が予期しているすべての引数を渡して結果を取得することも、引数のサブセットのみを渡し、残りの引数を待機する関数を受け取ることもできます。これはカレーの簡単な例です:

JavaScript concepts every Node developer must master

元のカリー化された関数は、各パラメーターをかっこの別々のセット内で順番に渡すことで直接呼び出すことができます。

JavaScript concepts every Node developer must master

これは、関数ファクトリーの作成を可能にする興味深いテクニックで、外側の関数によって内側の関数を部分的に構成できます。たとえば、上記のカリー化された関数を次のように使用することもできます:

JavaScript concepts every Node developer must master

実際の使用法では、特定のパラメータに応じて変化する多くの関数を作成する必要がある場合に、このアイデアが役立ちます。

8. JavaScript の適用、呼び出し、バインド メソッド

これらを毎日使用するわけではありませんが、

callapplybind メソッドが何であるかを理解しておくとよいでしょう。ここでは、言語の大幅な柔軟性を扱っています。基本的に、これらのメソッドを使用すると、this キーワードが何に解決されるかを指定できます。

3 つの関数すべてで、最初の引数は常に、関数に与える

this 値またはコンテキストです。

3 つのうち、

call が最も簡単です。これは、コンテキストを指定して関数を呼び出すのと同じです。以下に例を示します:

JavaScript concepts every Node developer must master

applycall とほぼ同じであることに注意してください。唯一の違いは、引数を個別に渡すのではなく、配列として渡すことです。配列は JavaScript での操作が容易で、関数を操作する可能性がさらに広がります。 applycall: を使用した例を次に示します。

JavaScript concepts every Node developer must master

bind メソッドを使用すると、関数を呼び出さずに関数に引数を渡すことができます。新しい関数は、それ以降の引数の前に、制限された引数を付けて返されます。以下に例を示します:

JavaScript concepts every Node developer must master

9. JavaScript のメモ化

メモ化は、高コストの操作の結果を保存し、同じ入力セットが再度発生したときにキャッシュされた結果を返すことによって関数の実行を高速化する最適化手法です。 JavaScript オブジェクトは連想配列のように動作するため、JavaScript でのメモ化の実装が簡単になります。再帰階乗関数をメモ化階乗関数に変換する方法は次のとおりです:

JavaScript concepts every Node developer must master

10. JavaScript IIFE

即時呼び出し関数式 (IIFE) は、作成されるとすぐに実行される関数です。イベントや非同期実行とは何の関係もありません。ここに示すように IIFE を定義できます:

JavaScript concepts every Node developer must master

最初のかっこのペア

function(){...} は、かっこ内のコードを式に変換します。2 番目のかっこのペアは、式の結果として得られる関数を呼び出します。 IIFE は、自己呼び出し型の匿名関数として記述することもできます。最も一般的な使用法は、var によって作成された変数のスコープを制限するか、名前の衝突を避けるためにコンテキストをカプセル化することです。

await を使用して関数を呼び出す必要があるが、非同期関数ブロック内にいない場合もあります。これは、ファイルを直接実行可能にし、モジュールとしてもインポートしたい場合に発生することがあります。このような関数呼び出しは、 のように IIFE ブロックでラップできます。

JavaScript concepts every Node developer must master

11.便利な引数機能

JavaScript はメソッドのオーバーロードをサポートしていませんが (関数で任意の引数数を処理できるため)、引数を処理するための強力な機能がいくつかあります。 1 つは、関数またはメソッドをデフォルト値で定義できることです:

JavaScript concepts every Node developer must master

すべての引数を一度に受け入れて処理することもできるため、渡された任意の数の引数を処理できます。これは、

rest 演算子を使用して、すべての引数を配列に収集します。

JavaScript concepts every Node developer must master

実際に異なる引数構成に対処する必要がある場合は、いつでも確認できます:

JavaScript concepts every Node developer must master

また、JavaScript には組み込みの引数配列が含まれていることにも注意してください。すべての関数またはメソッドは、呼び出しに渡されるすべての引数を保持する

arguments 変数を自動的に提供します。

結論

Node に慣れるにつれて、ほぼすべての問題を解決する方法がたくさんあることに気づくでしょう。正しいアプローチが必ずしも明らかであるとは限りません。場合によっては、特定の状況に対して複数の有効なアプローチが存在することがあります。利用可能な多くのオプションについて知っておくと役立ちます。

ここで説明する 10 の JavaScript の概念は、すべての Node 開発者が知っておくと有益となる基本です。しかし、それらは氷山の一角です。 JavaScript は強力で複雑な言語です。使えば使うほど、JavaScript が実際にどれほど広大で、それを使ってどれだけのことができるかが理解できるようになります。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/usman_awan/10-javascript-concepts-every-node-developer-must-master-2na?1 侵害がある場合は、[email protected] に連絡して削除してください。それ
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3