Groovyの書き方
Javaと同じ書き方をしていてはGroovyらしさが出ない。どのように記述するとGroovyらしくなるのか。
文末のセミコロンの省略
import aaa.bbb.ccc println "aaaaa"
ちなみにimport staticは記述可能。ただし現バージョンではimport staticに*を使うとエラーになってしまう。
メソッド呼び出しの括弧の省略
printlnなどのメソッド呼び出しのパラメータの括弧を省略する。
println "aaa" + "bbb" f.flush()
ただし、パラメータのないメソッドには括弧を付与して呼び出す必要がある。
Bean規約に従ったフィールド定義、アクセス
クラスのaaaというフィールドに対するgetter、setterが定義されている場合、下記のようにアクセスできる。
class A{ private aaa void setAaa(aaa){this.aaa} String getAaa(){this.aaa} } def obj = new A() obj.aaa = "foo" println obj.aaa
拡張for
for(i in [1,2,3]){ println i }
Groovyではinがキーワードになっている。Javaのソースをコピペして利用する場合、エラーになるので注意。(streamでinとか変数名に使っているかも)
正規表現
Matcher m = "hoge.text foo.text" =~ /([^\s]+?)\.text/ while(m.find()){ println m.group(1) + ".txt" } もしくは // m.each{m0,m1-> // println m1 + ".txt" // }
Mapのようなもの
def obj = ["key1":"val1","key2":"val2"] 空のMap def obj2 = [:]
returnの省略
メソッドの最後に評価されたものが戻り値になるため、一貫してreturnを記述しないという書き方ができる。
String adder(arg){ arg + 1 }
ファイルの一括読み込み
File f = new File("d:/path/foo.txt") def contents = f.getText("UTF-8") // 上記はもしくは def contens = f.text f.close()
上記でファイルの内容を一度に取得できる。
パラメータ付き引数
名前付きの引数でメソッドを呼ぶことができる。メソッド側では仮引数のMapから名前をキーにしてパラメータを参照できる。
//呼び出し側 fn05(arg0:"foo",arg1:"bar") //呼ばれる側 void fn05(map){ println map["arg0"] + map["arg1"] }
XMLの解析
ドキュメントにいろんなやり方が載っている。組み込みの機能でできるだけ簡単そうなもの。
def root = new XmlParser().parseText("<root><objects><object><id>aaa</id><name>bbb</name></object><object><id>aaa2</id><name>bbb2</name></object></objects></root>") root.objects.object.each{ println it.id.text() + ":" + it.name.text() }