無名関数とは
無名関数(またはラムダ関数とも呼ばれる)は、名前を持たない関数のことを指します。
定義と同時に実行できるため、主に一度しか使用されない短い関数を書く際に役立ちます。Goでは、無名関数は関数リテラルとして定義されます。
無名関数を使用する場面があるクロージャーについては以下記事で紹介しています。
実装例と実装例の実行結果
以下は、無名関数を使用した実装例です。
package main
import "fmt"
func main() {
// 無名関数の定義と実行
func(s string) {
fmt.Println(s)
}("これは無名関数です")
// 無名関数を変数に代入してから実行
greet := func(s string) {
fmt.Println(s)
}
greet("こんにちは、Go!")
}
無名関数が使われる具体的なケース
- イベント処理やコールバック: 一般的にイベントドリブンなプログラミングやコールバックを実装する際に、特定のイベントが発生したときだけ実行される関数が必要な場合があります。このような場面で無名関数は役立ちます。
- スライスのソート: Goの
sort.Slice
関数は、スライスのソートにカスタムの比較関数を提供できます。この比較関数は、通常は無名関数として定義されます。例えば、整数のスライスを降順にソートするための無名関数を提供することができます。
import (
"fmt"
"sort"
)
func main() {
nums := []int{3, 1, 4, 1, 5, 9, 2, 6}
sort.Slice(nums, func(i, j int) bool {
return nums[i] > nums[j] // 降順にソート
})
fmt.Println(nums) // [9 6 5 4 3 2 1 1]
}