Go 言語は関数型プログラミングをサポートし、マップ、フィルター、リデュースなどの組み込み関数ツールを提供し、ステートレス関数と不変データの使用を可能にします。高階関数を使用すると、関数は sort.Slice 関数などの他の関数を受け入れたり返したりすることができます。クロージャのネストされた関数は、外側の関数のスコープにアクセスして、再利用可能な完全な関数を作成できます。さらに、Go 言語は、柔軟で再利用可能なコードを構築するための高階関数とクロージャをサポートしています。
関数型プログラミングは、ステートレス関数と不変データの使用に重点を置くプログラミング パラダイムですが、可変状態ではありません。そして副作用。 Go 言語は関数型プログラミングをサポートしており、関数型コードの実装に役立ついくつかの便利な組み込み関数とメカニズムを提供します。
Go には、コレクションの操作、データの変換、その他の一般的な関数タスクの実行に役立つ組み込み関数ツールがいくつか用意されています。これらのツールには次のものが含まれます。
#map
: 関数をコレクションにマップし、新しいコレクションを返します。 filter
: コレクションをフィルターして、特定の条件を満たす要素のみを保持します。 reduce
: 提供された関数を使用してコレクションを集約し、要素を単一の値に結合します。 take
: コレクションの末尾から指定された数の要素を取得します。 skip
: コレクションの先頭から指定された数の要素をスキップします。 高階関数は、他の関数を入力として受け入れるか、関数を出力として返します。 Go は高階関数をサポートしているため、再利用可能で柔軟なコードを構築できます。
一般的な例は、sort.Slice
関数です。この関数は、比較関数を受け取り、渡されたスライスを並べ替えます。
package main import ( "fmt" "sort" ) func compareInt(a, b int) int { if a < b { return -1 } if a > b { return 1 } return 0 } func main() { nums := []int{3, 1, 7, 5, 9} sort.Slice(nums, compareInt) fmt.Println(nums) }
Aクロージャは、たとえそれが戻ったとしても、それを囲んでいる関数のスコープにアクセスできる入れ子関数です。これにより、ステートフルで再利用可能な関数を作成できます。
一般的な例は、funcFilter
関数です。この関数は、指定された述語に基づいてコレクションをフィルター処理する新しい関数を返します。
package main import "fmt" func main() { nums := []int{3, 1, 7, 5, 9} funcFilter := func(fn func(int) bool) func([]int) []int { return func(s []int) []int { var r []int for _, n := range s { if fn(n) { r = append(r, n) } } return r } } filterOdd := funcFilter(func(n int) bool { return n%2 != 0 }) fmt.Println(filterOdd(nums)) }
以下は、関数プログラミングを使用して単語の頻度を計算する例です。
package main import ( "fmt" "strings" ) func main() { text := "The quick brown fox jumped over the lazy dog" words := strings.Fields(text) wordFrequencies := make(map[string]int) for _, w := range words { if _, ok := wordFrequencies[w]; !ok { wordFrequencies[w] = 0 } wordFrequencies[w]++ } for w, f := range wordFrequencies { fmt.Printf("%s: %d\n", w, f) } }
この例では、単語のコレクションを反復処理し、各単語の頻度をマップに保存します。 map
と range
を使用して関数セット操作を実装します。
以上がgolang 関数型プログラミングの一般的な用途は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。