Groovy: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 1035:
</source>
 
== DSL (Domain Specific Language) ==
== Replacement ==
 
Простой пример реализации DSL в файле HelloWorldDSL.groovy:
<source lang="groovy">
class HelloWorldService {
// этот метод станет ключевым словом в нашем DSL
void printHelloWorld() {
println("MyGradleImpl World")
}
}
//"Делегат" который примет замыкание, инициализирует настройки поиска кому передать выполнение замыкания
class HelloWorldScript {
static void execute(@DelegatesTo(strategy = Closure.DELEGATE_FIRST, value = HelloWorldService) Closure script) {
script.resolveStrategy = Closure.DELEGATE_FIRST
script.delegate = new HelloWorldService()
script()
}
}
//Передаем в метод execute() замыкание которое выполнит метод printHelloWorld()
HelloWorldScript.execute({
printHelloWorld()
})
</source>
Перепишем последний вызов на другой вид вызова метода:
<source lang="groovy">
HelloWorldScript.execute {
printHelloWorld()
}
</source>
Теперь реализуем простейший DSL для создания коллекции книг из библиотеки в файле LibraryDSL.groovy:
<source lang="groovy">
class Books {
final String title
private final List<Book> books = []
Books(String title){
this.title = title
}
// ключевое слово для нашего DSL синтаксиса
void book(String title, String author) {
books << new Book(title: title, author: author)
}
void printAll(){
books.each {println it}
}
int bookSize(){
return books.size()
}
public void printInfo(){
println("Title:"+title)
printAll()
println("size:"+bookSize())
}
}
class Book {
String title
String author
@Override
public String toString() {
return "Book{" +
"title='" + title + '\'' +
", author='" + author + '\'' +
'}';
}
}
class Library {
static Books createCollection(String collectionTitle, @DelegatesTo(strategy = Closure.DELEGATE_FIRST, value = Books) Closure script) {
def books = new Books(collectionTitle)
script.resolveStrategy = Closure.DELEGATE_FIRST
script.delegate = books
script()
return books
}
}
//Запускаем создание коллекции книг из библиотеки
def books = Library.createCollection "First Collection", {
book "Book 1", "A. Author"
book "Book 2", "B. Author"
book "Book 3", "C. Author"
}
//и выводим всю информацию про коллекцию
books.printInfo()
</source>
 
== Grape - менеджер зависимостей ==
[http://docs.groovy-lang.org/latest/html/documentation/grape.html Grape - Встроенный менеджер] зависимостей для загрузки из репозиториев Maven необходимых библиотек.