今回から、具体的なJava SE 8の新機能について紹介していきます。はじめに紹介するのは、やはりJava SE 8の機能の中で最も注目されているProject Lambdaです。

 とはいっても、Project Lambdaで策定している仕様を1回で紹介するには範囲が広過ぎます。そこで、今回はProject Lambdaの中で、最も基本的な部分であるラムダ式を中心に紹介していきます。

Project Lambdaの成り立ち

 前回、紹介したようにJava SE 7のリリースが遅れた要因の1つに、Project Lambdaがあります。

 Project Lambdaの成り立ちについては、本連載の2010年3月の「クロージャからProject Lambdaへ」で言及しました。しかし、それから随分時間が経ってしまいましたし、その後もやはり紆余曲折あったので、改めてここでまとめてみましょう。

Project Lambda前史

 Project Lambdaではラムダ式が導入されていますが、それより前に、Javaにクロージャを導入する動きがありました。

 クロージャについて言及されたのは2005年のJavaOneにおいてでした。2005年といえば、まだJava SE 6がリリースされる前です。その時に、Java SE 7向けの機能として言及されたのです。

 それを受けて、2006年8月にGilad Bracha氏、Neal Gafter氏、James Gosling氏、Peter van der Ahe氏の4氏がJavaへのクロージャの導入案を提案したのです。彼らの提案は4氏の頭文字をとって、BGGAと呼ばれていました(その後、Closures for the Java Programing Languageに名称が変更されています)。

 この提案によって、Javaのコミュニティーで大激論が起こってしまったのです。

 特に、BGGAを実質的に引っ張っていたGafter氏と、クロージャ導入に反対の立場のJoshua Bloch氏との議論は有名です。というのも、彼らがJavaOneの名物セッションであるJava Puzzlersのスピーカーで、公私ともに仲がよいことで知られていたからです。

 しかし、この議論の後、彼ら2人でJava Puzzlersを行うことはなくなってしまいました。

 BGGAに触発されて、他にもクロージャの提案が行われています。

 たとえば、Joshua Bloch氏はDoug Lea氏、Bob Lee氏と共にCICE(Concise Instance Creation Expresions)を提案しています。CICEはクロージャは導入せずに、無名クラスの簡易記法を提案しています。結果的には、Project Lambdaのラムダ式はCICEの提案に近いものになっています。