日々常々

ふつうのプログラマがあたりまえにしたいこと。

Java SE 8 で入る Lambda の構文は新しいメソッド用と言うわけでもなく

Java SE 8 でようやく Project Lambda が入ります。何が嬉しいかってーと内部イテレーターですね。内部イテレーターってそのオブジェクトの中でぐるんぐるんするんで、外からは「この処理をしてくださいな」と渡す必要があります。それを簡単に書けるようにしたのが Project Lambda の構文。よくfilterとか新しく追加されるメソッドと一緒に紹介されますが、それだけでもありません。
現行のJava*1でも、何らかの処理をするインスタンスを渡せば出来なくはないんですが、やっぱりなんだかんだで面倒くさくございます。たとえば Collections#sort に渡す Comparator とかがそれにあたります。こういうの。

メソッド引数に new Comparator とか出てきてインタフェースを無名クラス実装して渡す。コード自体はIDEが適当に埋めてくれるので書くのはそれほど面倒ではないのですが、正直読み辛い。かといって定型の宣言や括弧を同じ行とかにねじ込んだところで、フォーマッターがサクッと戻してくれちゃいます。
クラスを別に作るって手もあるのですが、それだと遠くに書かなきゃいけないので面倒だったりします。もちろん適切な名前を付けることでわかりやすくするって効果が見込めたりしますが、そこまで汎用的な Comparator を作るなら、おそらく Comparable を実装しますよね。

これが Lambda を使うとこう書けます。

楽になりますねー。すっきりですねー。早く使いたいなー。

使いたいなら使ってみよう。Groovyで。

JDK 8u40 Early Access Releases — Project Kenai をダウンロードして直接試してもいいんですが、もし万一うっかり「もう現行のコードなんて書きたくないよハァハァ」となってしまっても、まだ Early Access Releases なので流石にプロダクトには使えないでしょう。そこでGroovyですよ。Groovyならこんな感じで似たように書けて、かつ今すぐでも使えます。

なるべくJavaを崩さないように書いています。元のJava SE 7 以前のコードもGroovyとしては通じるのですが、そこから「なるべくLambdaの書き方に近いように」って感じにするとこうなります。


無論Groovyなんで、やってることだけを純粋にやるとこうなったりします。

ですが、今回は Lambdaシンタックスを書く練習?にGroovyどう?とか、そんな感じで触ってみてはいかがー?ってエントリなので。そしてうっかりGroovyを本採用するといいと思うんです。

*1:Java SE 7以前