クロージャ(closure: 関数閉包)とは、実行時の文脈で部分特殊化された関数オブジェクトのこと。引数付きで動的生成された関数オブジェクトといっても良いかも知れない。
似た名前にClojureというプログラミング言語があるが、関数型プログラミングを通じてつながりはあるものの、ClojureにとってClosureが最重要な要素というわけでもなく紛らわしい。
概要
手続き型言語の感覚では、関数というものはメモリ空間上でスタティックに居座るコード塊のことを指す。
それに対して関数型言語(schemeとか)や、コードのブロックそれ自体もオブジェクトとして認識できるタイプのオブジェクト指向言語(SmalltalkやRuby)の場合、例えば引数2つの関数func(A,B)があったとして、「funcの最初の引数に値1729を渡す1引数関数」(func2(C) = func(1729,C))を生成できる。
こういう作られた時点での情報を「閉じこめた」関数をクロージャ(closure)という。
副作用ありの言語では、クロージャで閉じこめた情報を自分で書き換えたりできるため、カプセル化の代わりで使ったりもする。
関連項目
- 2
- 0pt