Go のパラメーターとしての関数
Java などのプログラミング言語では、関数をパラメーターとして他の関数に渡すことができます。これにより、高度な柔軟性とコードの再利用が可能になります。 Go も同様の機能を提供していますか?
Go の関数クロージャー
はい、Go は、関数クロージャーとして知られる概念を通じてパラメーターとして関数を渡すことをサポートしています。クロージャは、宣言元の外側の関数のスコープと変数を参照および保持できる関数です。
実装
Go では、関数はファーストクラスです。つまり、変数に代入したり、引数として渡したり、値として返すことができます。関数をパラメータとして渡すには、関数を func(paramList) returnType 型の変数に割り当てるだけです。
例
次のコード スニペットを考えてみましょう。
package main import "fmt" // define a function that converts an integer to a string func convert(x int) string { return fmt.Sprintf("%v", x) } // define a function that passes a function as a parameter func quote123(fn func(int) string) string { return fmt.Sprintf("%q", fn(123)) } func main() { result := quote123(convert) fmt.Println(result) // Output: "123" }
この例では、整数を文字列値に変換する Convert という関数を定義します。次に、この関数をパラメータとして quote123 という別の関数に渡します。 quote123 関数は、func(int) string 型の関数を引数として受け取ります。関数内で、渡された関数を呼び出し、値 123 を渡します。結果は引用符で囲まれた文字列として返されます。
その他の例
次のこともできます。無名関数を定義してパラメータとして渡します。例:
result := quote123(func(x int) string { return fmt.Sprintf("%b", x) }) fmt.Println(result) // Output: "1111011"
この場合、整数をバイナリ表現に変換する匿名関数を渡します。
関数インターフェイス
Go には Java や C# のような明示的な関数インターフェイスがありません。ただし、特定の関数シグネチャを必要とする独自の型を定義することもできます。たとえば、次の型を定義できます:
type MyFunctionType func(int) string
この型では、パラメータとして渡される関数に次のシグネチャを持つ必要があります: func(int) string。この型を使用すると、正しい署名を持つ関数のみが渡されるようにすることができます。
結論
Go は、関数クロージャーを介して関数をパラメーターとして渡すための強力なメカニズムを提供します。これにより、大幅な柔軟性とコードの再利用が可能になり、高階関数を必要とするアプリケーションにとって Go は優れた選択肢となります。
以上がGo は Java のように関数をパラメータとして渡すことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。