匿名関数
Coddyの「Golangの関数とポインタ」コースのレッスン 9/19。
これまでに学んだのは、名前を持つ関数を定義する方法と、それを呼び出す必要があるときにその名前を使用する方法です。しかし、名前のない別のタイプの関数があり、このタイプを無名関数(アノニマス関数)と呼びます。
これは通常の関数と同じように動作しますが、その仕組みにはいくつかの違いがあります。これらの関数を使用すると、他の場所で関数を定義することなく、アクションを直接定義できます。
無名関数を定義する方法の例を見てみましょう:
b := func(x, y int) int { return x - y }
fmt.Println(b(100, 50))ここでは、引き算を行う無名関数を格納する変数 b を定義しています。関数を呼び出すときは、単に変数名 b(100, 50) を使用します。
また、別の関数からの結果として無名関数を受け取ることもできます。例えば:
func operation(a int) func(int) int {
if a == 1 {
return func(a int) int { return a + 10 }
} else {
return func(a int) int { return a * 10 }
}
}
func main() {
b := operation(1)
fmt.Println(b(14))
}ここでは、operation という名前の通常の関数を定義しており、その結果(戻り値)は単純な値ではなく、無名関数 <strong>func(int) int</strong> になります。
戻り値を変数 b に代入します。関数 operation にパラメータとして 1 を渡しているため、実行されるブロックは次のようになります:
return func(a int) int { return a + 10 }ここで無名関数 b を呼び出すとき、整数値(例えば 14)を渡す必要があります。
結果は次のようになります:
24これは、14 である a(<strong>b(14)</strong>)を渡した a + 10 の計算結果です。
チャレンジ
簡単3つの整数引数を受け取る無名関数を作成してください。
もし最初の引数が最後の引数より大きい場合は、すべての引数の合計を返してください。そうでない場合は、最初と最後の引数の積を返してください。
関数の結果をresultという名前の変数に格納してください。
自分で試してみよう
package main
import "fmt"
func main() {
// 無名関数を定義し、それを "result" という変数に代入します。
// 結果を表示します。ここは変更しないでください!
fmt.Println("Result:", result(2, 3, 4))
fmt.Println("Result:", result(8, 3, 4))
}
Golangの関数とポインタのすべてのレッスン
1はじめに
はじめに