もっさり日記

だらだらと。

プログラミング GROOVYのお勉強その4

前回の続き。
70〜81ページの内容。

ジェネリクス

  • 普通に使えるけど型エラーのチェックは無視されるっぽい
    • Groovyから生成される.classファイルにはジェネリクスの情報がちゃんとある

クロージャ

  • Groovy楽しいな〜って感じる機能のひとつ
    • C#とかが羨ましかった
// 単純に呼び出してみる1
Closure c1 = { println "クロージャその1" }
c1.call()

// call()を省略もできる
Closure c2 = { println "クロージャその2" }
c2()

// 引数を渡して呼び出してみる
Closure c3 = { arg -> println "クロージャ$arg" }
c3.call("その3")

// 暗黙の引数 it を取る
// 引数無しの場合、it は null となる
Closure c4 = { println "クロージャ$it" }
c4.call("その4")

// 引数を取らない場合は下記
Closure c5 = { -> println "クロージャその5" }
c5.call() // c5.call("a")などとすると MissingMethodException:No signature of method となる
  • 大好きだコレヽ(・∀・ )ノ キャッ キャッ

ローンパターン

  • C#でいう using区みたいなの
  • Javaだとこんなにめんどくさい(´・ω・`)
FileInputStream fis = null;
try{
    fis = new FileInputStream("hoge.txt");
}finally{
    if(fis != null){
        try{
            fis.close();
        }catch(Exception e){
        }
    }
}
  • でもGroovyだとこんなに簡単!
new FileInputStream("hoge.txt").withStream{
    fis -> // 処理
}

コレクション型

  • 範囲は .. で生成できる
list = 1..10 // 1〜10が格納される
assert list.size() == 10
  • 繰り返しで範囲を使える、文字列も出来るとか反則
// for文で使ってみる
for(int i: 1..10){
    println i // 1〜10までが出力される
}

// こんなのもできる
(1 ..< 10).each{
    println it // 1〜9までが出力される
}

// 文字列も出来るとか!
("a" .. "d").each{
    println it // a 〜 dまでが出力される
}

※1時過ぎたのでまた今度(´・ω・`)