C言語には優れたプログラミング手法が数多くありますが、その中でも関数型プログラミングは非常に実用的な技術です。関数型プログラミングは関数の再利用性と柔軟性を重視しており、これによりコードがより明確になり保守しやすくなります。この記事では、C による関数型プログラミングのテクニックを紹介します。
1. 関数オブジェクト
関数オブジェクトは呼び出し可能なオブジェクトであり、関数とみなすことができます。 C の関数オブジェクトは、クラス オブジェクトまたは関数ポインターになります。関数オブジェクトは STL アルゴリズムで使用でき、他の関数のパラメーターとしても使用できます。以下は関数オブジェクトの簡単な例です。
class Add { public: int operator()(int x, int y) const { return x + y; } }; int main() { Add add; int result = add(1, 2); return 0; }
この例の Add クラスは () 演算子をオーバーロードするため、Add オブジェクトを関数のように呼び出すことができます。関数オブジェクトを使用すると、コードをより簡潔かつ柔軟にすることができます。
2. ラムダ式
ラムダ式は、C 11 で導入された新しい言語機能で、匿名関数を簡単に定義できます。ラムダ式の基本的な構文は次のとおりです:
[capture list] (parameter list) -> return type { function body }
このうち、キャプチャ リストはラムダ式がキャプチャする必要がある変数のリスト、パラメータ リストはラムダ式のパラメータ リスト、戻り値の型はその値です。ラムダ式。戻り値の型。関数本体はラムダ式の関数本体です。
以下は簡単なラムダ式の例です:
auto add = [] (int x, int y) -> int { return x + y; }; int result = add(1, 2);
この例のラムダ式は、2 つの int 型パラメータを受け入れ、それらの合計を返す add 関数を定義します。
3. std::function
std::function は、C 11 の関数オブジェクト テンプレート クラスであり、任意の呼び出し可能なオブジェクトを格納できます。 std::function を使用すると、関数オブジェクトとラムダ式を簡単に渡すことができ、コールバック関数やその他のシナリオの実装にも使用できます。以下は、単純な std::function の例です。
std::function<int(int, int)> add = [] (int x, int y) -> int { return x + y; }; int result = add(1, 2);
この例では、2 つの int 型パラメータを受け入れ、それらの合計を返すことができる std::function オブジェクト add が定義されています。ラムダ式を std::function オブジェクトに割り当てると、関数オブジェクトの保存と転送が可能になります。
4. カリー化
カリー化は、複数のパラメーターを持つ関数を、単一のパラメーターを受け入れる関数のシーケンスに変換する手法です。カリー化により関数をより柔軟にすることができ、部分的なアプリケーション関数などの関数を実装するために使用できます。 C でカリー化を実装するには、関数オブジェクトとラムダ式を使用できます。
次は関数オブジェクトのカリー化の例です:
class Add { public: int operator()(int x) const { return x + y; } private: int y; }; int main() { Add add; add(1)(2); // 返回3 return 0; }
この例の Add クラスはカリー化を実装します。パラメーター x を受け入れ、それを返して別のパラメーターを受け入れることができます。 y の関数オブジェクト。複数パラメータ関数の計算は、連続呼び出しによって実行できます。
次はラムダ式をカリー化する例です:
auto add = [] (int x) { return [=] (int y) { return x + y; }; }; int main() { int result = add(1)(2); // 返回3 return 0; }
この例のラムダ式は、パラメータ y を受け取り、and の x と y を返す関数オブジェクトを返します。カリー化はラムダ式を通じて実現できます。
概要
この記事では、関数オブジェクト、ラムダ式、std::function、カリー化などの C での関数プログラミング手法を紹介します。これらの手法により、コードの柔軟性と読みやすさが向上し、コードの保守性と再利用性が向上します。実際のプログラム開発では、これらの手法を合理的に適用することで、コードの品質と効率を向上させることができます。
以上がC++ の関数型プログラミング手法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。