昨年、DBFluteの勉強会(in 表参道)を
支援してくださった株式会社ビズリーチ様の
エンジニアブログが再開されました!
ビズリーチラボ
多種多様なエンジニアが集まっているので、
内容もバラバラでマニアックでとても楽しみです。
さて、そこで紹介されていたびっくり記事。
(jfluteが読んでて「おおっ」ってうなった)
// Java8を試してみた | ビズリーチラボ
http://lab.bizreach.co.jp/?p=233
なんと、Java8の "lamda式" (ラムダ式)
(クロージャー...っていう感じではないのかな!?)
を DBFlute で試されています。
わー、待ち望んでいた構文がとうとう!
DBFluteはコールバックをめっちゃ多用しています。
Javaのコールバックがどんくさいのは承知の上で。
それでもやっぱりその方がAPI的にはしっくりくるから。
ExistsReferrerやLoadReferrerで採用されています。
要は、こんな感じ:
cb.query().existsPurchaseList(new SubQuery<PurchaseCB>() {
public void query(PurchaseCB subCB) {
subCB.query().setPurchasePrice_GreaterEqual(2000);
}
});
「public void どけっ!
つーか、括弧閉じがなんか多いわー」
って、言いたくなりますよね。
(jfluteは、言い続けてきた)
ブログを読むと、どうやらこんな感じになるようで:
cb.query().existsPurchaseList(subCB -> {
subCB.query().setPurchasePrice_GreaterEqual(2000);
});
ああぁ、素敵。
というか、ようやく C# に追いついた!
コールバックは、内部的な処理でもよく使っています。
やはり、構造を作りやすいんですよね。
クラス化して Template Method パターンとかでも
いいのですが、そこまで大げさでなくていい処理に、
スーパークラスで継承してってのは重くって、
それはそれで大げさにする必要のある場所で使って、
フットワークの軽さが欲しいところではコールバック。
(そんな厳密ではないですけどね...なんとなくって感じ)
まあ、コールバックってちょっと敷居はあがるんですが、
少なくともConditionBeanの場合は、
「とある処理をコールバックさせる」って意識じゃなく、
「DBアクセスの条件を指定する」って感じなので、
プログラミング経験浅い人にも、
わりとさっくり受け入れてもらっています。
だからこそというかなんというか、とにかくとにかく、
Javaプログラマーとしてうれしいことうれしいこと。
ただ、Eclipseの補完がそこにどれだけいい感じの
支援をしてくれるかどうか、そこは大事。
そう、今までJavaのコールバックがどんくさいっても、
Eclipseの補完が素敵すぎてそれをあまり感じさせなかった。
一方で、C#はdelegateですっかりだけど、VisualStudioの
補完が残念で、少ない文字数なのに逆に書くのが面倒とかね。
また、Java8はリリースまだだし、
リリースされてからJava8が現場に降りてくるのはまだまだ先。
というか、Java7ですら現場デビューはあまり見かけません。
身近なプロジェクトのほとんどがまだJava6です。
ただまあ、Java7にする意味があまりないってこともあるかも。
Java8はかなりインパクトがあるとなれば、
早めに現場も Java8 を使おうってことになるかも。
そうなるといいなぁと妄想だけしています。
こんな記事も見かけますし...
-> Spring Framework 4.0はJava 8対応
フレームワーク側はみな似たようなこと考えているのかな。
Java8対応じゃなくてもJava8で動くってのが一番ですが、
明示的な対応の方がいいことがあるってなら覚悟しないとぅ。
個人的には、Java8が、
DBFluteのさらなる旅へのスタート地点だと...