なぜ設定ファイルの書き方がこんな構文なのか
groovyとかDSLとか、ほとんど触ったことがないので、android の build.gradle に書いてある
buildscript {
repositories {
jcenter()
}
}
みたいな設定がどうしてこんな構文でかかれてて動くのかわからなかったので調べてみた。
調べた結果
-
buildscript
とかrepositories
はメソッド- groovy ではメソッドの引数がひとつ以上ある場合、括弧を省略できる
-
{}
で囲われている部分はクロージャー- 0引数のクロージャならば,-> を省略してよい。
- メソッドの最後の引数がクロージャになっている場合、そのメソッドをクロージャをつけて呼び出すことができる
- なので、
buildscript({ここがクロージャ})
の場合、`buildscript(){ここがクロージャ} とかける
- なので、
これらを踏まえて省略されていない形で、かつメソッドっぽく書き直してみる
buildscript({ ->
repositories({ ->
jcenter()
})
})
-
jcenter()
を実行するためのクロージャがある - (1を引数にもつ
repositories()
メソッド)を実行するためのクロージャがある - 2を引数にもつ
buildscript()
メソッドがある
まとめ
- gradle の設定は groovy の構文でかかれているので、こまったらgroovy調べよう!
- (訳:groovy を調べないと構文の意味がわからなくてものすごく躓く・・・)
参考
Gradle User Guid
Japanese Closures
クロージャーとかあんまりよくわかっていないところもあるので、何か間違っているところがあったらご指摘お願いします!