ホームページ ウェブフロントエンド jsチュートリアル JavaScript での関数型プログラミングの高度なアプリケーション

JavaScript での関数型プログラミングの高度なアプリケーション

Jun 15, 2023 pm 11:01 PM
javascript 関数型プログラミング 高度なアプリケーション

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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Python ラムダ式: 省略、簡潔、強力 Python ラムダ式: 省略、簡潔、強力 Feb 19, 2024 pm 08:10 PM

pythonLambda 式は、簡潔で読みやすく、使いやすいコードを作成するための強力で柔軟なツールです。これらは、他の関数に引数として渡したり、変数に保存したりできる匿名関数をすばやく作成するのに最適です。 Lambda 式の基本構文は次のとおりです。 lambdaarguments:expression たとえば、次の Lambda 式は 2 つの数値を加算します: lambdax,y:x+y この Lambda 式は、次のように引数として別の関数に渡すことができます。 defsum( x ,y):returnx+yresult=sum(lambdax,y:x+y,1,2) この例では

関数プログラミングに C++ ラムダ式を使用する利点は何ですか? 関数プログラミングに C++ ラムダ式を使用する利点は何ですか? Apr 17, 2024 am 10:18 AM

C++ ラムダ式は、関数型プログラミングに次のような利点をもたらします。 シンプルさ: 匿名インライン関数により、コードの可読性が向上します。コードの再利用: コードの再利用を容易にするために、ラムダ式を渡したり保存したりできます。カプセル化: 別の関数を作成せずにコードの一部をカプセル化する方法を提供します。実際のケース: リスト内の奇数をフィルタリングします。リスト内の要素の合計を計算します。ラムダ式は、関数型プログラミングの簡素化、再利用性、カプセル化を実現します。

遅延評価を使用して Golang 関数型プログラムを最適化するにはどうすればよいですか? 遅延評価を使用して Golang 関数型プログラムを最適化するにはどうすればよいですか? Apr 16, 2024 am 09:33 AM

Go では、遅延データ構造を使用して遅延評価を実装できます。実際の値をカプセル化し、必要な場合にのみ評価するラッパー型を作成します。関数型プログラムでのフィボナッチ数列の計算を最適化し、実際に必要になるまで中間値の計算を延期します。これにより、不要なオーバーヘッドが排除され、関数型プログラムのパフォーマンスが向上します。

Golang 関数型プログラミングのよくある間違いと落とし穴 Golang 関数型プログラミングのよくある間違いと落とし穴 Apr 30, 2024 pm 12:36 PM

Go で関数型プログラミングを使用する場合に注意すべき 5 つの一般的な間違いと落とし穴があります。 参照を誤って変更することを避け、新しく作成された変数が返されるようにしてください。同時実行の問題を解決するには、同期メカニズムを使用するか、外部の可変状態のキャプチャを避けます。コードの可読性と保守性を向上させるために、部分的な機能化は控えめに使用してください。アプリケーションの堅牢性を確保するために、常に関数内のエラーを処理してください。パフォーマンスへの影響を考慮し、インライン関数、フラット化されたデータ構造、操作のバッチ処理を使用してコードを最適化します。

他の関数型プログラミング言語と比較した Java 関数の長所と短所は何ですか? 他の関数型プログラミング言語と比較した Java 関数の長所と短所は何ですか? Apr 24, 2024 pm 02:51 PM

Java 関数型プログラミングの利点には、単純さ、構成可能性、同時実行性、テストのしやすさ、パフォーマンスなどがあります。欠点としては、学習に時間がかかること、デバッグが難しいこと、柔軟性が限られていること、パフォーマンスのオーバーヘッドが挙げられます。その主な機能には、副作用のない純粋な関数、データ処理パイプライン、ステートレス コード、効率的なストリーミング API が含まれます。

Python ラムダ式: 匿名関数の威力を明らかにする Python ラムダ式: 匿名関数の威力を明らかにする Feb 24, 2024 am 09:01 AM

Python のラムダ式は、匿名関数の別の構文形式です。これは、プログラム内のどこにでも定義できる小さな匿名関数です。ラムダ式はパラメータ リストと式で構成されます。式には有効な Python 式を使用できます。ラムダ式の構文は次のとおりです: lambdaargument_list:expression. たとえば、次のラムダ式は 2 つの数値の合計を返します: lambdax,y:x+y. このラムダ式は、マップなどの他の関数に渡すことができます。 () 関数:数値=[ 1,2,3,4,5]結果=マップ(ラムダ

関数型プログラミングはすべての golang プロジェクトに適していますか? 関数型プログラミングはすべての golang プロジェクトに適していますか? May 01, 2024 pm 07:12 PM

関数型プログラミングはすべての Go プロジェクトに適しているわけではありません。これにより、予測可能性、同時実行性、およびモジュール性が提供されますが、パフォーマンスが犠牲になり、コードの冗長性が高まり、学習曲線が必要になる可能性があります。これらの利点が必要なプロジェクトでは FP が有益ですが、パフォーマンスとコードの単純さが重視されるプロジェクトでは、オブジェクトベースのプログラミングの方が適しています。

他の関数型プログラミング言語と比較した Java 関数の利点は何ですか? 他の関数型プログラミング言語と比較した Java 関数の利点は何ですか? Apr 23, 2024 pm 10:12 PM

Java 関数型プログラミングには、他の言語と比較した利点があります。 1. ストリーム処理: StreamAPI は、強力で効率的なデータ処理機能を提供します。 2. 高階関数: コードの再利用性を向上させ、複雑なロジックを簡素化します。 3. ラムダ式: 簡潔な匿名関数定義を提供し、機能を強化します。 4. 並列処理: 並列ストリームは、マルチコア プロセッサでの並列コンピューティングをサポートし、集中的なタスクを高速化します。これらの機能により、Java は大規模なデータ セットと複雑なロジックの処理に優れています。

See all articles