Groovy v1.8.1とv1.9-beta-1の新機能をサクっと紹介するよ
このシリーズの一覧はこちら
はじめに
2011-07-21にGroovy v1.8.1とv1.9-beta-1が同時リリースされたようなので、その新機能の一部をサクっと紹介します。
1. プリミティブ型演算のパフォーマンス最適化
割愛*1
2. ストリーミングビルダー(StreamingJsonBuilder)
StreamingJsonBuilder (Groovy 1.8.6)
JSONペイロードを直接writerに書き出したいとき(そして出力前にデータ構造を修正する必要がないとき)に使えるらしいです。ここでは動作確認としてv1.9-beta-1を利用しました。
import groovy.json.StreamingJsonBuilder import groovy.json.JsonOutput new StringWriter().with { w -> def json = new StreamingJsonBuilder(w) // <- Writerをストリーミングビルダに装着 json.あんただれよ { なまえ 'ふも' おしごと 'プログラマ' すんでるところ ( くに: '日本', とし: '名古屋' ) } println JsonOutput.prettyPrint(w.toString()) // <- プリティーに出力 }
3. 2つのビルダーにPOGO/POJO(単にオブジェクトを値として渡す)用のシンプルなシリアライゼーションを追加
ん?どのビルダー?(調査中)
4. groovyshが変数名やメソッド名のタブ補完をサポート*4
ここでは動作確認としてv1.9-beta-1を利用しました。
5. いつものGDK改良
割愛*5
6. Java 7 Project Coin対応:数値リテラルでのアンダースコアの使用(v1.9-beta-1のみ)
assert 1_0_0 + 2_0_0 == 3____00
アンダースコアはいくらあっても無視される認識でいいんですよね?*6
8. 複数の例外をまとめてキャッチするマルチキャッチ(v1.9-beta-1のみ)
// 適当に例外を定義 class HomuHomuException extends Exception{} class HomaHomaException extends Exception{} class HomeHomeException extends Exception{} 10.times { try { // ランダムで例外をスロー switch(new Random().nextInt(3)) { case 0 : throw new HomuHomuException() case 1 : throw new HomaHomaException() case 2 : throw new HomeHomeException() } } catch (HomuHomuException | HomaHomaException | HomeHomeException e) { // <- マルチキャッチ! println "thrown $e" // <- すべて変数eで受け取れる } }
実行結果
thrown HomeHomeException thrown HomuHomuException thrown HomuHomuException thrown HomeHomeException thrown HomuHomuException thrown HomuHomuException thrown HomaHomaException thrown HomuHomuException thrown HomaHomaException thrown HomuHomuException
まとめ
着実に進化しているGroovyを感じました。Keep on groovying!
参考記事
Groovy 1.8.1アップデートとGroovy 1.9の最初のベータ(翻訳) - Groovyラボ
GroovyにおけるProject Coin相当拡張について - Grな日々(uehajの日記)
GroovyなProject Coin - Groovyラボ