【レポート】

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

2 クロージャとは

    後藤大地  [2006/08/23]

    クロージャはソースコードのまとまりで、それ単体で扱うことができる単位。ジグソーパズルのピースようにソースコードのピースを実現するものといってもいい。特徴としては、クロージャ内ではクロージャよりも外の変数にアクセスでき、クロージャ自身を引数や返り値に渡すことができる。そして一番重要なことは、クロージャは独立した存在ではなく、クロージャの存在する環境と結び付いて動作するということだ(この特性を伴わない言語もある)。

    Javaでクロージャに一番近い存在として匿名内部クラスをあげることができる。しかし匿名内部クラスはクロージャ相当とはいいがたい。クロージャと匿名内部クラスの違いとして次を挙げることができる。

    • 匿名内部クラス内からクラス匿名内部外の変数にアクセスするにはテクニックが必要
    • 匿名内部クラスは原理的に再利用が難しい
    • 匿名内部クラスは記述が繁雑

    SmalltalkからJavaに移ってきたデベロッパなら、匿名内部クラスを使ってクロージャに相当する機能を実現しようと試み、あまりの繁雑な表記にさじを投げたことがあるだろう。匿名内部クラスはあくまでも名前のない内部クラスであって、クロージャではないのである。

    いちいちクラスを作成して使うのが面倒であることから、Javaに内部クラスや匿名内部クラスが導入された。しかし、依然として再利用の単位はクラスでありメソッドだ。クロージャはさらに細かいソースコードレベルでの再利用を可能にする機能である。

    そしてJavaでクロージャを実現する方法として、同氏らはJavaに関数を導入したいと提案している。Javaにおけるソフトウェア再利用の最小粒度単位が、実質的にクラスから関数までさがることになる。匿名のローカル関数がクロージャに相当することになり、Javaにかなり大きな変化をもたらすことになる。

    新着記事

    特設サイトの情報

      人気記事

      一覧

        イチオシ記事

        新着記事

        特別企画

        マイナビニュースマガジン