【学習golangシリーズ】クロージャ
[amazonjs asin="B06XJ86BFZ" locale="JP" title="プログラミング経験者がGo言語を本格的に勉強する前に読むための本"]
クロージャとは
今更ながら、クロージャとは「ローカル変数を参照している関数内の関数」のこと。
もはや常識レベルになっているんだろうけど、あまり使いこなせていない。。。
とりあえず、以下例。
package main
import (
"fmt"
)
func add() func() int {
// intを返す関数型を返す関数addを定義
// 初期値
n := 0
// int を返す関数型を返す
return func() int {
n++
return n
}
}
func main(){
a := add()
fmt.Println(a())
// 1
fmt.Println(a())
// 2
fmt.Println(a())
// 3
}
14行目のreturnのところに書いてあるクロージャの内部で、add関数内の変数nを参照している。
22行目でadd関数をaに代入し、aを実行するたびに数値が増えていく。
これは、aにadd関数内部のローカル変数nを保持された状態で無名関数が実行されるため、数値が増加していく。
クロージャを使わないとグローバル変数を用意する必要が出てくるため、クロージャを使い慣れておくと便利。
ディスカッション
コメント一覧
まだ、コメントがありません