【第五回Go言語学習備忘録】関数に関数外の環境を取り込む!(クロージャー)

どもです。お気に入りのレイバンのメガネを損傷させたことにいつまでもくよくよする、saisaiです。


本日の学習内容はクロージャーです。特徴をそれっぽく記事タイトルに書いてみましたが、ぶっちゃけわかりづらいですね…。


実際に使ってみないとなかなか理解できないのが"クロージャー"、早速サンプルコードを駆使して理解を深めていきたいと思います。

クロージャーを使ってみる

記事タイトルを読んでいただいたらわかるように、とにかく言語化しづらいのが"クロージャー"です。まずはサンプルコードを作成してみました。

package main

import "fmt"

func add(x, y int) func() int {
	return func() int {
		sum := x + y
		return sum
	}
}

func main() {
	result := add(10, 20)
	fmt.Println(result()) //30
}

add関数の返り値にまた関数を指定しています。つまり、内包されている関数の実行結果(30)がadd関数の返り値になるということですね!これがクロージャーと呼ばれる由縁なのでしょうか…。

print形で出力する際も注意が必要そうです。変数resultに代入しているのは"add"ではなく"add関数"なので、出力する際は関数を実行する形で指定する必要があるようです。

fmt.Println(result())


まとめ

今回は少し短めの記事となってしまいました…。クロージャーは様々な応用が利かせられそうなので、いつかまた別の形でリベンジしたいですね!


ここまで読んでいただき、ありがとうございました!


-saisai-

Golang

Posted by CY