クロージャを学ぶ
Ajaxを使った日本語 Full IME
http://chasen.org/~taku/software/ajax/fullime/
を見て「クロージャ」というキーワードが気になりました。
ということで、どういうものなのかを調べてみました。
Flashでクロージャ。-torus solutions!
http://www.torus.jp/memo/x200406/flash_closure.rd.html
このページの解説を見て勉強。
最近は、JavaScriptとかActionScriptを使う機会が少ないので、
他の言語で使えないかなぁと思いました。
読んでいくと「Delphi、C++ Builder、C#でいうところのイベントハンドラみたいなものかな」と思ったんですが、
この、データと関数をひとまとめにしてカプセル化したものを、 クロージャといいます。
これは、オブジェクト指向でいうところのオブジェクトと機能的には同じですが、クラスを明示的に宣言したりする必要がない分気軽に使うことが出来ます。データとコードの結びつきは、クラスを定義して生成したオブジェクトよりも強いくらいです。
とある通り、気軽さがミソみたいですね。
確かに僕が最初に感じたイベントハンドラみたいなものより、遙かに簡単に使えそうです。
しかし、言語によって、使い方がかなり変わりそうです。
ここまで簡単には使えない場合もあるのかな?
・・・しかし、不思議さを感じますね。
無名関数は、言語によってはあるので合点がいきます。
不思議なのは、count変数です。
こういう風に書くと、こういう風に動くものなんですねぇ・・・。
スコープとしては問題無さそうですが、無名関数に引数として渡してもらった方が、
僕としてはしっくりきます。