GroovyにおけるProject Coin相当拡張について
id:fumokmmさんの日記で、「5分で理解するProject Coin」というすばらしい記事があり、Java 7の言語に関連する拡張がすぐに良くわかるように紹介されています。(私もしばらく前に記事をかきました。)
Groovyでもじつは、Coinの文法拡張について細かいものも含めてちまちまと対応されていて、最新版ではけっこう使えるんです*1。
まずはダイアモンド(型推論)
List<List<List<String>>> list = new ArrayList<>()
問題なし。でも、なぜかあんまりメリットを感じられない:)。
Groovy 1.8beta3からです。
二進数リテラル
1.9-beta-1からです。
$ groovy -e 'println 0b110010101010'
3242
$ groovy -e 'println 0b110010101010.class'
class java.lang.Integer
$ groovy -e 'println 0b000101001111111111111111111000000010.class '
class java.lang.Long
数値リテラル中のアンダースコアが無視される
これも1.9-beta-1から。
$ groovy -e 'println 0b110_010_101010'
3242
$ groovy -e 'println 0xffff_5555'
4294923605
$ groovy -e "println 3_3"
33
このように二進リテラルにかぎりません。
例外のマルチキャッチ
try { if (args.size() == 0) throw new IllegalArgumentException(); else throw new NullPointerException(); } catch (IllegalArgumentException | NullPointerException e) { println e }
1.9-beta-1から。
その他
switch文にプリミティブ以外が使えるとか、コレクションのリテラルや、リストとマップに対する添字アクセスとかはGroovyでは最初期からできた話。
リースパターンの劣化版*2たるtry-with-resourceは、Groovyに導入してもどうかな、とは思うけど、まあ互換のためだけに入ることになるのかな。