Menu
Coddy logo textTech

匿名関数

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 の計算結果です。
 

challenge icon

チャレンジ

簡単

3つの整数引数を受け取る無名関数を作成してください。

もし最初の引数が最後の引数より大きい場合は、すべての引数の合計を返してください。そうでない場合は、最初最後の引数のを返してください。

関数の結果をresultという名前の変数に格納してください。

自分で試してみよう

package main

import "fmt"

func main() {
    // 無名関数を定義し、それを "result" という変数に代入します。
 
    
    
    // 結果を表示します。ここは変更しないでください!
    fmt.Println("Result:", result(2, 3, 4))
    fmt.Println("Result:", result(8, 3, 4))
}

Golangの関数とポインタのすべてのレッスン