Search on the blog

2010年12月25日土曜日

クロージャとは何か?(1)

最近よく耳にするクロージャ。
JavaやC++の最新バージョンがクロージャをサポートするとか、しないとか。。

で、結局、クロージャって何なの?
いろいろ調べてみましたが、「なるほど!」と思わせるサイトがいくつかあったので、それを読んで得た知識を紹介します。(間違いなどありましたらご指摘ください。)

wikiをみると、以下のような解説があります。

In computer science, a closure is a first-class function with free variables that are bound in the lexical environment. Such a function is said to be "closed over" its free variables. A closure is defined within the scope of its free variables, and the extent of those variables is at least as long as the lifetime of the closure itself.

日本語訳。(間違いあるかも。。)
クロージャとは自由変数を持つ第一級関数である。そして、その自由変数はそのスコープにおいて境界となる。このような関数はその自由変数に包括されたと言われる。
クロージャはその自由変数のスコープによって定義され、それらの変数の有効期限は、クロージャそのもののライフタイムと同じ程度である。

これだけ見ても??な感じですが、具体的な例を見るとその意味が分かります。
クロージャの例や便利な使い方(pythonでの使用例)は次回紹介するとして、今回は、クロージャのポイントをまとめます。

①変数を持ち、かつ、オブジェクトのように扱うことのできる関数である。
②自由変数によってその機能がclosed(固定)される。
③自由変数は、クロージャそのものが存在している間は、記憶され続ける。

どうやら、汎用的な機能を持つ関数の機能を何らかの変数で固定して使うような仕組みを”クロージャ”と呼ぶのではないでしょうか?
逆に言うと、異なる変数で"closed"してあげると、異なる機能を持った関数を簡単に作成することができるということにもなります。

0 件のコメント:

コメントを投稿