ホームページ > バックエンド開発 > Golang > Go は Java のように関数をパラメータとして渡すことができますか?

Go は Java のように関数をパラメータとして渡すことができますか?

Patricia Arquette
リリース: 2024-12-03 19:35:10
オリジナル
279 人が閲覧しました

Can Go Pass Functions as Parameters Like Java?

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート