Golang は、関数型プログラミング パラダイムをサポートする強力なプログラミング言語です。関数型プログラミングは、関数がプログラミング言語の第一級市民であり、関数には副作用があってはいけないことを強調する関数指向プログラミング アプローチです。この記事では、Golang で関数型プログラミングの実践を使用する方法を探っていきます。
1. Golang における関数型プログラミングの基礎
Golang では、関数は第一級市民です。これは、関数を変数のように渡したりバインドしたりできることを意味します。したがって、関数は整数や文字列と同様に値として扱うことができます。 Golang は、コレクション型 (配列やスライスなど) を処理するために使用できる、map、reduce、filter などの高次関数も提供します。
これらの高階関数は、いくつかの一般的な関数プログラミング操作を実行するために使用できます。たとえば、map 関数は、コレクション内の各要素を別のコレクション内の要素にマップします。 Reduce 関数は、コレクション内の要素を蓄積できます。フィルター関数を使用すると、条件を満たさないコレクション内の要素をフィルターで除外できます。
2. 関数型プログラミングの実践
例を使用して、Golang で関数型プログラミングを練習する方法を示しましょう。配列内のすべての数値の二乗和を計算する関数を作成します。次の配列があるとします。
numbers := []int{1, 2, 3, 4, 5}
for ループを使用して、各要素の二乗和を計算できます。
sum := 0 for _, number := range numbers { sum += number * number }
この for ループは、0 に初期化されるアキュムレータの合計を使用します。 。次に、配列内の各要素を反復処理し、その二乗をアキュムレータに加算します。最後に、配列内のすべての数値の二乗和を取得します。
関数型プログラミングを使用すると、このコードを関数呼び出しに単純化できます。 map 関数を使用して配列内の各要素を 2 乗し、reduce 関数を使用してそれらを累積できます。この操作を実装する関数は次のとおりです。
func square(n int) int { return n * n } func sum(numbers []int) int { squaredNumbers := Map(numbers, square) return Reduce(squaredNumbers, func(acc, n int) int { return acc + n }) }
この関数では、まず数値の 2 乗を計算するために使用される 2 乗関数を定義します。次に、整数の配列をパラメータとして受け取り、この配列の二乗和を返す sum 関数を定義します。
sum 関数では、Map 関数を使用して配列内の各要素を 2 乗します。次に、Reduce 関数を使用して要素を平方配列に蓄積します。 Reduce 関数は 2 つのパラメーターを受け取ります。最初のパラメーターは整数配列で、2 番目のパラメーターは関数です。この関数は、配列内の各要素に対して累積演算を実行するために使用されます。この例では、無名関数を使用して要素を蓄積します。
3. 高階関数の実装
上記のコードでは、Map 関数と Reduce 関数を使用します。これらの関数は Golang の標準ライブラリには存在しません。ただし、これらの関数を自分で実装することもできます。
まず、Map 関数の実装を見てみましょう。 Map 関数は、整数配列と関数の 2 つのパラメーターを受け取ります。これらは、配列内の各要素を操作するために使用されます。 Map 関数は、操作の結果を含む新しい整数配列を返します。
func Map(numbers []int, f func(int) int) []int { result := make([]int, len(numbers)) for i, n := range numbers { result[i] = f(n) } return result }
Map 関数では、まず元の配列と同じ長さの新しい配列結果を作成します。次に、元の配列の各要素を反復処理し、それを関数 f に渡して操作し、結果を新しい配列に保存します。最後に、この新しい配列を返します。
次に、Reduce 関数の実装を見てみましょう。 Reduce 関数は、整数の配列と、配列内の各要素を累積するために使用される関数の 2 つのパラメーターを受け取ります。 Reduce 関数は、累算の結果である整数値を返します。
func Reduce(numbers []int, f func(int, int) int) int { result := numbers[0] for _, n := range numbers[1:] { result = f(result, n) } return result }
Reduce 関数では、まずアキュムレータの結果を配列の最初の要素として初期化します。次に、配列内の残りの要素を反復処理し、Reduce 関数に渡された関数 f を使用して要素を累積します。最後に、累積された結果を返します。
IV. 結論
この記事では、Golang の関数型プログラミングの基本を確認し、関数型プログラミングを使用して単純な関数を実装する方法を説明しました。複雑な状況。ただし、Map や Reduce などの高階関数を使用してそれらを処理することはできます。これらの関数を使用すると、複雑なロジックをシンプルで構成可能な方法で構築できるため、コードの読み取り、保守、テストが容易になります。
以上がGolang関数の関数型プログラミング演習の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。