2008年10月28日火曜日

クロージャー

Java7でクロージャーが取り入れる予定とのことで、クロージャーとは何かを調べてみた。
クロージャー とは、引数以外の変数を実行時の環境ではなく、自身が定義された環境(静的スコープ)において解決する関数のことである」とあるが、簡単に言うと関数をモジュールとして扱うことのようだ。
 UDS(Forte)での開発をしていた時、IDE上ではメソッドは独立した存在として扱うことができた。たとえば、あるメソッドを1つのクラスから別のクラスへDrag&Dropしたり、コピー・ペーストしたりなどである。ただし、コードの上ではこれを実現することはできず、メソッド(関数)をオブジェクト同様に引数として渡せれば、、と思う場面があったが不可能であった。
 関数型の言語では関数そのものを引数として渡したり、関数を戻り値にとるような「高階関数」という存在があるが、クロージャーはそれを限定的に使用したものということか。Javaで使用できるようになれば現在はAOPやCallBackとして実装している部分がかなりすっきすとしそうな感じがする。ただし、懸念として記事にもなっているが、Cの関数ポインタのように特に初心者にはわかりずらい、つまりコードを追いにく記述になってしまう場合が多いと思われる。

参考:
ついにJavaにもクロージャ? - James Gosling氏らJDK7へ導入提案

0 件のコメント: