SlideShare a Scribd company logo
ТТррееннииннгг:: 
GGrroooovvyy —— ммллааддшшиийй ббрраатт 
JJaavvaa ннаа ввеещщеессттвваахх 
ББаарруухх ССааддооггууррссккиийй 
@@jjBBaarruucchh
Java & Groovy - братья на век! 
• Java код ~=> валидный Groovy код! 
• Меньше Boilerplate! 
• Перегрузка операторов! 
• Больше функциональщины! 
• У Groovy классов есть метакласс! 
• У Groovy есть AST трансформации!
Java код ~=> валидный Groovy код! 
•Не поддерживаются: 
• Внутренние классы (не нужны) 
• Инициализация множественных переменных в for 
• Создание массива на лету (поддерживается, но не так) 
• Синтаксис 8 (ещё аж 2 недели!) 
• Checked exceptions
Меньше Boilerplate 
// Groovy bean 
class CourseBean { 
String title 
} 
def groovyCourse = new CourseBean() 
groovyCourse.setTitle('Groovy') 
assert groovyCourse.getTitle() == 'Groovy' 
groovyCourse.title = 'Groovy rulez' 
assert groovyCourse.title == 'Groovy rulez'
Перегрузка операторов 
Оператор Метод Уже переопределен в 
а + b a.plus(b) Number, String, StringBuffer, 
Collection, Map, Date, Duration 
а[b] a.getAt(b) Object, List, Map, CharSequence, 
Matcher, и ещё много где 
a << b a.leftShift(b) Используется много где как синоним к append 
switch(a){ 
case b: 
} 
a in b 
b.isCase(a) 
Object, Class, Range, Collection, 
Pattern, Closure; 
Позволяет использовать любой класс в switch 
a == b a.equals(b) В Груви == запускает equals 
a <=> b a.compareTo(b) java.lang.Comparable 
a as type 
a.asType(typeClas 
s) 
везде
Больше функциональщины 
// data.txt 
//>>first line 
//>>second line 
// Замыкания (здесь зарыты грабли) 
def number = 0 
new File('data.txt').eachLine { line -> 
number++ 
println "$number: $line" 
} 
Получаем: 
1: first line 
2: second line
У Groovy классов есть метакласс 
//Добавляем/переопределяем метод/свойство для объекта 
Person p = new Person() 
p.metaClass.nickName = ‘John Doe’ 
p.metaClass.sayGoodBye << {println ‘Good bye!’} 
println p.getNickName() 
p.sayGoodBye() 
//Добавляем метод к классу 
Person.metaClass.printName = {println delegate.name} 
delegate – обращение к объекту 
Все объекты созданные до того, как метод был добавлен, не будут его 
иметь
У Groovy есть AST трансформации 
//Что написали: 
@Cannonical 
Class Person { 
String firstName 
String lastName 
} 
Что получили: 
• Геттеры и Сеттеры 
• Конструкторы на все случаи 
жизни 
• С именными параметрами тоже 
• equals() 
• hashCode() 
• toString()
ККООННЕЕЦЦ
ККООННЕЕЦЦ

More Related Content

What's hot

Курс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-выводКурс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
7bits
 
Database First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДDatabase First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБД
Nikolay Samokhvalov
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.
Igor Shkulipa
 
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)
Ontico
 
Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиАвтоматизация тестирования многопоточности
Автоматизация тестирования многопоточности
SQALab
 
Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.
Anton Moiseenko
 
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ontico
 
Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.
Anton Moiseenko
 
Основы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрованияОсновы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрования
bearoff
 
курс Java 2016. занятие 03. интерфейсы, generic, исключения
курс Java 2016. занятие 03. интерфейсы, generic, исключениякурс Java 2016. занятие 03. интерфейсы, generic, исключения
курс Java 2016. занятие 03. интерфейсы, generic, исключения
7bits
 
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Ontico
 
C++ STL & Qt. Занятие 09.
C++ STL & Qt. Занятие 09.C++ STL & Qt. Занятие 09.
C++ STL & Qt. Занятие 09.
Igor Shkulipa
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)
Alexander Gornik
 
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекцииКурс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
7bits
 
Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)
Fedor Malyshkin
 
Профилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системахПрофилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системах
Aleksander Alekseev
 
Нагрузочное тестирование web-приложений с помощью Load Runner
Нагрузочное тестирование web-приложений с помощью Load RunnerНагрузочное тестирование web-приложений с помощью Load Runner
Нагрузочное тестирование web-приложений с помощью Load Runner
SQALab
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
Омские ИТ-субботники
 
Everything you wanted to know about writing async, high-concurrency HTTP apps...
Everything you wanted to know about writing async, high-concurrency HTTP apps...Everything you wanted to know about writing async, high-concurrency HTTP apps...
Everything you wanted to know about writing async, high-concurrency HTTP apps...
JavaDayUA
 
Полный цикл разработки на Python + Django
Полный цикл разработки на Python + DjangoПолный цикл разработки на Python + Django
Полный цикл разработки на Python + DjangoAzamat Tokhtaev
 

What's hot (20)

Курс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-выводКурс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
 
Database First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДDatabase First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБД
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.
 
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)
 
Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиАвтоматизация тестирования многопоточности
Автоматизация тестирования многопоточности
 
Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.
 
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
 
Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.
 
Основы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрованияОсновы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрования
 
курс Java 2016. занятие 03. интерфейсы, generic, исключения
курс Java 2016. занятие 03. интерфейсы, generic, исключениякурс Java 2016. занятие 03. интерфейсы, generic, исключения
курс Java 2016. занятие 03. интерфейсы, generic, исключения
 
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
 
C++ STL & Qt. Занятие 09.
C++ STL & Qt. Занятие 09.C++ STL & Qt. Занятие 09.
C++ STL & Qt. Занятие 09.
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)
 
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекцииКурс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
 
Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)
 
Профилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системахПрофилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системах
 
Нагрузочное тестирование web-приложений с помощью Load Runner
Нагрузочное тестирование web-приложений с помощью Load RunnerНагрузочное тестирование web-приложений с помощью Load Runner
Нагрузочное тестирование web-приложений с помощью Load Runner
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
 
Everything you wanted to know about writing async, high-concurrency HTTP apps...
Everything you wanted to know about writing async, high-concurrency HTTP apps...Everything you wanted to know about writing async, high-concurrency HTTP apps...
Everything you wanted to know about writing async, high-concurrency HTTP apps...
 
Полный цикл разработки на Python + Django
Полный цикл разработки на Python + DjangoПолный цикл разработки на Python + Django
Полный цикл разработки на Python + Django
 

Similar to Groovy

Groovy jug-moscow-part 1
Groovy jug-moscow-part 1Groovy jug-moscow-part 1
Groovy jug-moscow-part 1
Evgeny Borisov
 
2014 iForum - Grails in Startup
2014 iForum - Grails in Startup2014 iForum - Grails in Startup
2014 iForum - Grails in StartupBohdan Danyliuk
 
Курс Java-2016. Занятие 08. Итераторы, многопоточность
Курс Java-2016. Занятие 08. Итераторы, многопоточностьКурс Java-2016. Занятие 08. Итераторы, многопоточность
Курс Java-2016. Занятие 08. Итераторы, многопоточность
7bits
 
2014 Jeeconf - Geb Spock
2014 Jeeconf - Geb Spock2014 Jeeconf - Geb Spock
2014 Jeeconf - Geb Spock
Bohdan Danyliuk
 
PHP7 - что ожидать?
PHP7 - что ожидать?PHP7 - что ожидать?
PHP7 - что ожидать?
Дмитрий Золотов
 
Groovy presentation on Exception #7 conference
Groovy presentation on Exception #7 conferenceGroovy presentation on Exception #7 conference
Groovy presentation on Exception #7 conference
voituk
 
Groovy On Grails
Groovy On GrailsGroovy On Grails
Groovy On Grailsguest32215a
 
Groovy presentation.
Groovy presentation.Groovy presentation.
Groovy presentation.
Infinity
 
The Epic Groovy Puzzlers S02: The Revenge of the Parentheses
The Epic Groovy Puzzlers S02: The Revenge of the ParenthesesThe Epic Groovy Puzzlers S02: The Revenge of the Parentheses
The Epic Groovy Puzzlers S02: The Revenge of the Parentheses
JavaDayUA
 
50 оттенков play!
50 оттенков play!50 оттенков play!
50 оттенков play!
Andrei Solntsev
 
Елена Жукова "Жизнь вне JavaScript"
Елена Жукова "Жизнь вне JavaScript"Елена Жукова "Жизнь вне JavaScript"
Елена Жукова "Жизнь вне JavaScript"
Fwdays
 
Java весна 2013 лекция 9
Java весна 2013 лекция 9Java весна 2013 лекция 9
Java весна 2013 лекция 9Technopark
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3
Technopark
 
Kotlin
KotlinKotlin
Kotlin
GDG Odessa
 
Память в Java. Garbage Collector
Память в Java. Garbage CollectorПамять в Java. Garbage Collector
Память в Java. Garbage Collector
Olexandra Dmytrenko
 
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Fedor Lavrentyev
 
Enter: legacy code
Enter: legacy codeEnter: legacy code
Enter: legacy code
Kamil Samigullin
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3C
Yandex
 

Similar to Groovy (20)

Groovy jug-moscow-part 1
Groovy jug-moscow-part 1Groovy jug-moscow-part 1
Groovy jug-moscow-part 1
 
2014 iForum - Grails in Startup
2014 iForum - Grails in Startup2014 iForum - Grails in Startup
2014 iForum - Grails in Startup
 
Курс Java-2016. Занятие 08. Итераторы, многопоточность
Курс Java-2016. Занятие 08. Итераторы, многопоточностьКурс Java-2016. Занятие 08. Итераторы, многопоточность
Курс Java-2016. Занятие 08. Итераторы, многопоточность
 
2014 Jeeconf - Geb Spock
2014 Jeeconf - Geb Spock2014 Jeeconf - Geb Spock
2014 Jeeconf - Geb Spock
 
PHP7 - что ожидать?
PHP7 - что ожидать?PHP7 - что ожидать?
PHP7 - что ожидать?
 
Groovy presentation on Exception #7 conference
Groovy presentation on Exception #7 conferenceGroovy presentation on Exception #7 conference
Groovy presentation on Exception #7 conference
 
Groovy On Grails
Groovy On GrailsGroovy On Grails
Groovy On Grails
 
Groovy presentation.
Groovy presentation.Groovy presentation.
Groovy presentation.
 
The Epic Groovy Puzzlers S02: The Revenge of the Parentheses
The Epic Groovy Puzzlers S02: The Revenge of the ParenthesesThe Epic Groovy Puzzlers S02: The Revenge of the Parentheses
The Epic Groovy Puzzlers S02: The Revenge of the Parentheses
 
50 оттенков play!
50 оттенков play!50 оттенков play!
50 оттенков play!
 
Елена Жукова "Жизнь вне JavaScript"
Елена Жукова "Жизнь вне JavaScript"Елена Жукова "Жизнь вне JavaScript"
Елена Жукова "Жизнь вне JavaScript"
 
Java весна 2013 лекция 9
Java весна 2013 лекция 9Java весна 2013 лекция 9
Java весна 2013 лекция 9
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3
 
Kotlin
KotlinKotlin
Kotlin
 
Память в Java. Garbage Collector
Память в Java. Garbage CollectorПамять в Java. Garbage Collector
Память в Java. Garbage Collector
 
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
 
Enter: legacy code
Enter: legacy codeEnter: legacy code
Enter: legacy code
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3C
 
Bytecode
BytecodeBytecode
Bytecode
 
JavaScript как объектно-ориентированный язык программирования
JavaScript как объектно-ориентированный язык программированияJavaScript как объектно-ориентированный язык программирования
JavaScript как объектно-ориентированный язык программирования
 

Groovy

  • 1. ТТррееннииннгг:: GGrroooovvyy —— ммллааддшшиийй ббрраатт JJaavvaa ннаа ввеещщеессттвваахх ББаарруухх ССааддооггууррссккиийй @@jjBBaarruucchh
  • 2. Java & Groovy - братья на век! • Java код ~=> валидный Groovy код! • Меньше Boilerplate! • Перегрузка операторов! • Больше функциональщины! • У Groovy классов есть метакласс! • У Groovy есть AST трансформации!
  • 3. Java код ~=> валидный Groovy код! •Не поддерживаются: • Внутренние классы (не нужны) • Инициализация множественных переменных в for • Создание массива на лету (поддерживается, но не так) • Синтаксис 8 (ещё аж 2 недели!) • Checked exceptions
  • 4. Меньше Boilerplate // Groovy bean class CourseBean { String title } def groovyCourse = new CourseBean() groovyCourse.setTitle('Groovy') assert groovyCourse.getTitle() == 'Groovy' groovyCourse.title = 'Groovy rulez' assert groovyCourse.title == 'Groovy rulez'
  • 5. Перегрузка операторов Оператор Метод Уже переопределен в а + b a.plus(b) Number, String, StringBuffer, Collection, Map, Date, Duration а[b] a.getAt(b) Object, List, Map, CharSequence, Matcher, и ещё много где a << b a.leftShift(b) Используется много где как синоним к append switch(a){ case b: } a in b b.isCase(a) Object, Class, Range, Collection, Pattern, Closure; Позволяет использовать любой класс в switch a == b a.equals(b) В Груви == запускает equals a <=> b a.compareTo(b) java.lang.Comparable a as type a.asType(typeClas s) везде
  • 6. Больше функциональщины // data.txt //>>first line //>>second line // Замыкания (здесь зарыты грабли) def number = 0 new File('data.txt').eachLine { line -> number++ println "$number: $line" } Получаем: 1: first line 2: second line
  • 7. У Groovy классов есть метакласс //Добавляем/переопределяем метод/свойство для объекта Person p = new Person() p.metaClass.nickName = ‘John Doe’ p.metaClass.sayGoodBye << {println ‘Good bye!’} println p.getNickName() p.sayGoodBye() //Добавляем метод к классу Person.metaClass.printName = {println delegate.name} delegate – обращение к объекту Все объекты созданные до того, как метод был добавлен, не будут его иметь
  • 8. У Groovy есть AST трансформации //Что написали: @Cannonical Class Person { String firstName String lastName } Что получили: • Геттеры и Сеттеры • Конструкторы на все случаи жизни • С именными параметрами тоже • equals() • hashCode() • toString()