JavaプロジェクトでGroovyを導入すべき5つの理由
前段
TDDBootCamp in Tokyo 1.5にJavaグループの一員として参加させていただきました。
そこでGroovyをやりたいというホットなエンジニアと出会いまして、GroovyでTDDをさせていただきました。
いきなりGroovyでプロダクトを書く事はなかなかないと思っているので、Javaのプロダクトコードに対して、Groovyのテストコードを書く。という方法で演習しました。
そこで、皆様がGroovyへ多少なりとも注目してくださいましたので、このエントリーを書いてみようと思いました。
JavaプロジェクトでGroovyテストコードを導入すべき5つの理由
以下であげる5つのポイントは「Groovyを知らないJavaプログラマーがすぐに始められるGroovyの強力な機能」をとりあげました。
もちろんここにあげた以外にもたくさんのGroovyの強力な機能はありますが、それらの威力を知るのはGroovyに本腰をいれてからでも遅くはありません。なにせ、GroovyはJavaと同じように書いてもほとんど同じように動作し、テストコードは気軽に書けるものであることが多いからです。
1.簡潔なループ処理
2.明示的なPowerAssert
3.privateにも簡単にアクセスできる
4.強力なデバッグプリント
5.簡潔なリスト、マップ定義
1.簡潔なループ処理
Javaの場合
for(int i=0; i < 5; i++){ System.out.println(i); } List<String> list = new ArrayList<String>(); // listに要素追加処理 for(String str : list){ System.out.println(str); }
Groovyの場合
5.times{ println it } List<String> list = new ArrayList<String>(); // listに要素追加処理 list.each{ println it }
もしくは
0.upto(4){ println it }
Groovyでは 数字.times でその数字分のループ処理を実行します。そのときにループ処理の中で使えるカウンタは0オリジンです。
同じようにListインターフェースはeachメソッドでforeach処理を使用できます。
もし、違う1オリジンやその他で行いときには 開始数字.upto(終了数字) で 開始数字から始まるループ処理を実行できます。
ループ処理のなかの it は自動的にこの変数名でカウンタが代入されています。※itはクロージャのデフォルト変数ですが、それはクロージャが何であるかを学んでもらうときに理解すれば問題ありません。
2.明示的なPowerAssert
assert String.class.name.equals(Integer.class.name)
Groovyではバージョン1.7からassert文の表示が非常に綺麗になりました。テストが失敗した時にコンソールをパッと見でわかるのは素晴らしいです。
3.privateにも簡単にアクセスできる
class Hoge { private String foo = "this is private." public String bar = "this is public." } Hoge hoge = new Hoge() println hoge.foo println hoge.bar
実行結果
this is private. this is public.
TDDやリファクタリングやレガシーコードでテストコードを書くときにprivateにアクセスしたくなるときがあります。簡単に書けるのでとてもいいです。
4.強力なデバッグプリント
println new HashMap().dump()
実行結果
<java.util.HashMap@0 table=[null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] size=0 threshold=12 loadFactor=0.75 modCount=0 entrySet=[] keySet=null values=null>
dump()メソッドはGroovyのデフォルトメソッドになっているので、どのようなクラスにでも基本的に使えます。内部のオブジェクトの状態を可能な限りフィールド名と値を出力してくれます。
5.簡潔なリスト、マップ定義
List foo = [1,2,3,4,5,6,7,8,9,0] foo.each{ println it } Map bar = [hoge:"value1",fuga:"value2"] bar.each{ println it println it.key println it.value }
実行結果
1 2 3 4 5 6 7 8 9 0 hoge=value1 hoge value1 fuga=value2 fuga value2
[a,b,c,d]でArrayListのインスタンスが生成できます。[key1:value1,key2:value2]でLinkedHashMapのインスタンスが生成できます。
他にもListは#add()の代わりに list+"hoge" のように+で追加できるとかたくさんありますが、とりあえず上記5つを実践できるだけでも十分にJavaのコードがより直感的になるのではないでしょうか?
Happy Groovy Life!
- 作者: 関谷和愛,上原潤二,須江信洋,中野靖治
- 出版社/メーカー: 技術評論社
- 発売日: 2011/07/06
- メディア: 単行本(ソフトカバー)
- 購入: 6人 クリック: 392回
- この商品を含むブログ (155件) を見る