Gradle и Groovy Magic

Gradle иногда может быть довольно запутанным, особенно для разработчиков Android, работающих над небольшими и средними проектами. В Android-проектах Gradle установлен по умолчанию, и мы редко чувствуем необходимость изучать, как и почему все работает.

Вот несколько вопросов и ответов, которые могли возникнуть у вас в связи с Gradle.

1. Почему мы используем gradlew taskName вместо gradle taskName для выполнения задачи?
Потому что в наших проектах мы используем Gradle wrapper, чтобы иметь одну версию Gradle для всех разработчиков проекта.

2. Модули Android Studio и проекты Gradle
Проект Android также является проектом Gradle. Gradle имеет отношения 1 к 1 между своими проектами и файлами build.gralde. То же, что в Android studio называется «модулем», в Gradle называется подпроектом.

3. Следует ли использовать ' или " для строковых литералов?
Groovy, который является одним из языков, используемых наряду с Kotlin для описания скрипта Gradle, распознает как двойные, так и одинарные кавычки в качестве строки.
Типы строк в Groovy:

  • ‘Hello World 1’ — String
  • «Hello World 2» — строка
  • «Hello World $count» — GString

4. Вызовы функций, свойства и когда использовать круглые скобки?
В Groovy:

  • Если функция имеет хотя бы один параметр, можно игнорировать фигурные скобки.Поля являются свойствами, поэтому каждое поле класса генерирует setter и getter для объявленного поля.

Посмотрите на приведенный ниже код и попробуйте угадать, сколько раз будет вызвана функция Foo.name() при выполнении ./gradlew showMagic?

class Foo {
    def name = ""

    void name(String newString) {
        name = newString
        println("Foo.name() triggered")
    }
}

tasks.create("showMagic") {
    doFirst {
        group "Whole new group"
        description "Check setter and getter capabilities"

        def foo = new Foo()

        foo.name = "string 1"
        println("showMagic() ${foo.name}")
        foo.name("string 2")
        println("showMagic() ${foo.name}")
        foo.name "string 3"
        println("showMagic() ${foo.name}")
        foo.setName("string 4")
        println("showMagic() ${foo.name}")
        foo.setName "string 5"
        println("showMagic() ${foo.name}")
        String propertyOrFunctionName = "name"
        foo."$propertyOrFunctionName" = "string 6"
        println("showMagic() ${foo.name}")
    }
}
Вход в полноэкранный режим Выйти из полноэкранного режима

Выход:

showMagic() string 1
Foo.name() triggered
showMagic() string 2
Foo.name() triggered
showMagic() string 3
showMagic() string 4
showMagic() string 5
showMagic() string 6
Войти в полноэкранный режим Выйти из полноэкранного режима

5. Функции с несколькими параметрами
Как вы могли догадаться из приведенного выше кода, мы можем игнорировать круглые скобки и передавать несколько параметров, разделенных запятыми:

void foo(String url, String parameter) {
    println url
    println parameter
}

tasks.create("callFoo") {
    doFirst {
        foo "google.com", 'consistency'
    }
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Оцените статью
devanswers.ru
Добавить комментарий