mike、mikeなるままに…

プログラムに関してぬるま湯のような記事を書きます

AndroidがJavaだと思っている人のためのGroovy講座 - 1

タイトルが偉そうなこと書いていますが、

大したことは書きません。

みけです。

Android Studioが出てきてgradleとは何ぞと思っている方がいると思います

gradleはgroovyで記述できるビルドシステムです。

antの自由なところと、mavenの依存性管理を組み合わせたイケてるところが売りです。

さて、この記事では…

gradleのことはほとんど書きません

Android開発者でgradleとは何やねん?って思っている方には

こちらに詳細が書かれていますので、読んでみて下さい。

で、この記事は何を書いているの?というわけで、

簡単なgroovyの文法の説明を書きます

これを覚えると、gradleの記述で少し楽をできるかもしれません。

でも、groovyのことを完璧に説明しているかというと、そうでもないので、

詳しくは次の本を買って読んで下さい。

では、以下、本題

メソッドの引数部分の括弧は省略できる

多分gradleを初めて見た人で何やねんこれと思う記述はこういうやつだと思います。

build.gradle
1
task myTask

このtaskというのは、AbstractProjectという抽象クラスで定義されているpublic Task task(Object task)というメソッドです。このメソッドはタスクをプロジェクトに登録するメソッドです。

したがって、上記の例ではtaskメソッドによってmyTask.toString()で得られる名前(myTask)のタスクが作成されます。

gradleの中で同様な記述がたくさんあると思います。

例えば

build.gradle
1
2
3
4
5
6
repositories {
    // some repository configuration
}
dependencies {
    // some dependency configuration
}

これらrepositoriesや、dependenciesも、実はみんなメソッドです。

裏をとってみる

では、こっから先はちょっと混みいった話

gradleのprojectの元になるクラスはorg.gradle.api.internal.project.AbstractProjectクラスです。

このクラスの中を少し見てみましょう。

AbstractProject.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public abstract class AbstractProject
        extends AbstractPluginAware
        implements ProjectInternal, DynamicObjectAware {
    // some codes

    public void repositories(Closure configureClosure) {
        ConfigureUtil.configure(configureClosure, getRepositories());
    }

    public void dependencies(Closure configureClosure) {
        ConfigureUtil.configure(configureClosure, getDependencies());
    }

    // some codes

    public Task task(String task) {
        return taskContainer.create(task);
    }

    public Task task(Object task) {
        return taskContainer.create(task.toString());
    }

    // some codes
}

はい、dependenciesrepositoriestaskといったキーワードはすべてメソッドですね。

結論:groovyではメソッドの引数部分の括弧を省略できる

…ん、gradleのことほとんど書かないと言ったな、あれは嘘だ。