JavaScript は関数型プログラミングをサポートする言語です。関数型プログラミングの中心的な考え方は、データと関数を分離し、プログラムの不変性と副作用のなさを強調することです。関数型プログラミングには簡潔な構文があり、コードの編成とテストに大きな利点があります。この記事では、JavaScript の関数型プログラミングの高度なアプリケーションをいくつか紹介します。
#純粋関数-
関数型プログラミングでは、最も基本的な概念の 1 つは関数の純粋性です。純粋関数とは、同じ入力を持つ関数を指します。パラメータはいつでも副作用なく同じ結果が得られます。この種の関数の利点は、同時実行環境でキャッシュしやすいことと、再帰の処理や不必要な繰り返し計算の回避にも役立ちます。加算は、次の関数を通じて実装できます。
function add(a, b) {
return a + b;
}
ログイン後にコピー
この関数は、典型的な純粋関数です。特定の入力の下でのみ出力があるためです。ただし、一般的な副作用は、関数が配置されている環境に影響を与えることです (一部の変数の値の変更や外部関数の呼び出しなど)。したがって、関数型プログラミングでは、これらの副作用を可能な限り回避する必要があります。つまり、可能な限り純粋な関数を作成する必要があります。
高階関数
高階関数とは、1 つ以上の関数をパラメータとして受け取るか、関数を戻り値として返す関数を指します。このような機能により、要件をより柔軟に実現し、コードの重複を減らすことができます。次の関数は高階関数の例です。関数をパラメータとして受け取り、新しい関数を返すことができます:
function compose(fn1, fn2) {
return function(value) {
return fn1(fn2(value));
};
}
ログイン後にコピー
この関数は新しい関数を返します。この関数は最初に fn2 を呼び出し、次に渡します結果 fn1 をパラメータとして与えます。この関数を使用すると、以下に示すように、複数の関数の組み合わせを実装できます:
function add10(val) {
return val + 10;
}
function square(val) {
return val * val;
}
var result = compose(add10, square)(5);
console.log(result); // 35 (5 + 10) * (5 + 10)
ログイン後にコピー
この例では、compose 関数に add10 と square を与えます。この関数は新しい関数を返します。この新しい関数を追加します。関数。関数には値 5 が渡されます。最終的に、期待した結果が返されました。
カリー化
カリー化は、関数を一度に 1 つの引数のみを受け入れる形式に変換する手法です。複数パラメーターの関数の値を単一パラメーターの関数チェーンに変換することは、関数をより柔軟に使用できるようにするための、関数の一種の「前処理」とも言えます。次の関数は複数の値の合計を実装できます:
function add(a, b, c) {
return a + b + c;
}
add(1, 2, 3); // 6
ログイン後にコピー
そしてこの関数はカリー化を通じて段階的に実装できます:
function add(a) {
return function(b) {
return function(c) {
return a + b + c;
};
};
}
add(1)(2)(3); // 6
ログイン後にコピー
ご覧のとおり、カリー化を通じて、add 関数 After first最初のパラメータを受け取ると、2 番目のパラメータを受け取る関数が返されます。これで、パラメータを 1 つずつ渡して、そのたびに新しい関数を返し、最終的に関数が返されるようになります。
関数の組み合わせ
関数の組み合わせとは、2 つ以上の関数を組み合わせて新しい関数を生成することであり、この新しい関数は渡された関数を左から右に呼び出します。関数を実行し、その結果を結合します。関数型プログラミングでは、関数の合成は、小さな関数を組み合わせて大きな関数にする最も効果的な方法です。 compose 関数を使用して複数の関数を組み合わせることができます。以下は関数合成の例です。
function add(a) {
return a + 10;
}
function multiply(b) {
return b * 2;
}
const addingAndMultiplying = compose(multiply, add);
addingAndMultiplying (10); // 40
ログイン後にコピー
この例では、最初に 2 つの単純な関数 add と multiply を定義し、次に結合関数 compose を使用してそれらを新しい関数に結合します。この新しい関数は、複数の関数を一度に呼び出し、その結果を結合できます。 addingAndMultiplying 関数に 10 を渡すと、最初に add 関数が呼び出され、10 と 10 が加算されて 20 になります。次に、結果を乗算関数に渡します。この関数は 20 を 2 で乗算し、最終結果は 40 になります。
関数カリー化と合成の組み合わせアプリケーション
関数カリー化と合成の組み合わせは、関数型プログラミングでよく使用されます。たとえば、いくつかの関数を定義して複合して、いくつかの操作を完了することができます。
function add(a) {
return function(b) {
return a + b;
};
}
function multiply(a) {
return function(b) {
return a * b;
};
}
function subtract(a) {
return function(b) {
return b - a;
};
}
function divide(a) {
return function(b) {
return b / a;
};
}
const discount = compose(subtract(10), multiply(0.1), add(20), divide(2));
discount(50); // 5
ログイン後にコピー
この例では、まず 4 つの単純な関数の加算、乗算、減算、除算を定義し、関数カレーを使用して変換しました。関数コンビネータ compose を使用すると、すべての操作を関連付けて最終結果を取得できます。この例では、カリー化と合成を使用して複数の単純な関数を 1 つの関数に結合する方法を示します。
結論
この記事では、純粋関数、高階関数、カリー化、関数合成、カリー化された関数合成など、JavaScript で関数型プログラミングを実装するための高度なアプリケーションをいくつか紹介しました。これらの概念は、関数の純粋性や不変性など、関数型プログラミングの中核となる考え方に基づいています。これらのテクニックは、より柔軟で再利用可能で、テストが容易なコードを作成するのに役立ちます。関数型プログラミングについてさらに詳しく知りたい場合は、豊富な関数型プログラミング ツールを提供するライブラリである Ramda.js のドキュメントを確認してください。
以上がJavaScript での関数型プログラミングの高度なアプリケーションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。