Udemy
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
Turn what you know into an opportunity and reach millions around the world.
Learn More
Your cart is empty.
Keep shopping
Beginner's Guide to Groovy for Java Devs
Highest Rated
Rating: 4.9 out of 5(100 ratings)
421 students

Beginner's Guide to Groovy for Java Devs

DSL, Closure, Динамическое программирование
Last updated 1/2023
Russian

What you'll learn

  • Язык программирования Groovy

Course content

1 section28 lectures4h 38m total length
  • 1. Введение7:52

    Groovy - это еще один язык программирования, который был создан как дополнение к языку Java. Он работает поверх JRE, как и многие другие языки программирования, например, Scala или Kotlin. Следовательно, перенимает все плюсы языка Java и добавляет свои, что делает его достаточно интересным языком для изучения. Более того, он довольно часто встречается на практике в реальных проектах и будет очень нужен для изучения других курсов на канале dmdev.

    00:00 - Введение
    00:33 - Что такое Groovy
    01:39 - Версии Groovy
    02:03 - Особенности Groovy
    03:10 - Динамический язык программирования
    04:53 - Compilation and Runtime (Java & Groovy)
    06:19 - Где используется Groovy
    07:16 - Резюме

  • 2. Установка программного обеспечения8:35

    Для того, чтобы приступить к изучению языка программирования Groovy, нам необходимо установить соответствующее программное обеспечение. Нам понадобится Java как минимум 8 версии, потому что как мы поняли из предыдущего видео: Groovy работает поверх JRE. Cреда разработки - IntelliJ IDEA, т.к. у нее прекрасная поддержка Groovy. И в зависимости от того, будете вы использовать build tools (Maven, Gradle) или нет, нам возможно понадобится вручную скачать и установить Groovy.

    00:00 - Введение
    00:20 - Установка Java 16
    00:56 - Установка IntelliJ IDEA
    01:38 - Установка Groovy 3.0.8
    03:15 - Создание Gradle проекта
    05:13 - Создание Maven проекта
    06:30 - Создание проекта без build tools

  • 3. Первая программа10:35

    Изучение любого языка программирования начинается с классического написания первой программы, которая напишет в консоль "Hello World". Также начнем знакомиться с первыми отличиями Groovy от языка Java и попробуем понять разницу между Groovy классами и Groovy скриптами, проделав все через консоль.

    00:00 - Введение
    00:25 - Groovy Class "Hello World"
    03:14 - Groovy Class bytecode
    04:20 - Groovy Script "Hello World"
    05:14 - Groovy Script bytecode
    07:22 - Утилиты groovyc и groovy
    10:22 - Резюме

  • 4. ClassLoader. ClassPath12:13

    Мы уже встречались на предыдущих курсах про такие понятия как загрузчик классов (ClassLoader) и пути указания JVM, где искать классы (ClassPath). Нам это занятии более подробно остановимся на этом вопросе, чтобы понять как запускаются groovy скрипты через утилиты groovy. Ведь скомпилированные groovy классы через утилиту groovyc и так просты и понятны, потому что сразу после компиляции у них точно такой же flow как и обычных Java классов.

    00:00 - Введение
    00:36 - Объекты класса Class
    02:45 - JDK, JRE, JVM
    04:05 - Основные Java ClassLoaders
    09:30 - GroovyClassLoader

  • 5. Примитивные типы данных. Переменные7:27

    В Groovy те же типы данных, что и в Java, за маленьким исключением - нет примитивных типов данных, а точнее, они все представлены в виде классов-оболочек. Так же появились новые представления литеральных форм для таки типов как BigInteger и BigDecimal, которые даже не нужно импортировать для использования. Обсудим несколько нюансов по новому ключевому слову def, которое можно использовать не только для создания локальных переменных, как в Java с ключевым словом var.

    00:00 - Введение
    01:03 - Основные типы данных
    02:01 - В Groovy нет примитивных типов данных
    03:09 - BigInteger и BigDecimal
    04:04 - imports
    05:38 - Ключевое слово def
    06:53 - Аннотация @CompileStatic

  • 6. Операции с переменными8:55

    Groovy явно не поддерживает ни одной стандартной операции, что у нас использовались в Java. Каждый оператор на самом деле транслируется в соответствующий вызов метода. На видео разберем каждый нюанс такого поведения, которое стало возможным в принципе благодаря отказу от примитивных типов данных.

    00:00 - Введение
    00:31 - Арифметические операторы
    02:42 - Приведение типов
    04:08 - Унарные операторы и операторы присваивания
    05:08 - Операторы сравнения
    07:50 - Логические и побитовые операторы
    08:36 - Резюме

  • 7. String и GString10:11

    Строки - это объекты, которые занимают почти 70% памяти в Java приложениях. Поэтому им уделяют очень большое внимание как в использовании, так и в оптимизации. Groovy пошел еще дальше и создал 6 разных вариантов создания строк и даже свой класс GString, про нюансы которых мы и поговорим в данном видео. 

    00:00 - Введение
    00:27 - 6 вариантов создания строк
    01:15 - Строки с одинарными и двойными кавычками
    01:51 - Интерполяция строк
    02:51 - Класс GString
    03:45 - Строки с тройными кавычками
    05:29 - Объявление типа char
    05:55 - Expression language в GString
    07:05 - Slashy & Dollar slashy strings
    08:21 - Операции со строками
    09:56 - Резюме

  • 8. Регулярные выражения. Regex10:26

    Регулярные выражения - очень нужный и часто используемый инструмент, который должен стоять на вооружении каждого программиста. В Groovy еще больше упростили их использование, если сравнивать с Java. Теперь синтаксис стал более лаконичным и кратким. На видео рассмотрим его более детально и зайдем внутрь bytecode, чтобы посмотреть, как Groovy Parsers работают под капотом, чтобы представить такой новый синтаксис. 

    00:00 - Введение
    00:38 - Regex in Java
    05:14 - Pattern in Groovy
    05:46 - Matcher in Groovy
    07:00 - Regex groups in Groovy
    09:58 - Резюме

  • 9. Closure. Часть 114:16

    Замыкания (Closure) - это один из самых мощных инструментов в программировании. Он существует и в Java в виде lambda выражений, в которых также можно использовать переменные вне области lambda выражений. Но в Groovy пошли еще дальше. На видео рассмотрим только первую часть концепции замыканий, чтобы иметь общее представление о них и изучить дальнейший базовый материал. Во второй части курса разберем замыкания на более продвинутом уровне, который позволит нам углубиться в такое понятие как DSL, ведь именно он стал отправной точкой в развитии таких инструментов как Gradle, Jenkins, etc. 

    00:00 - Введение
    00:42 - Java lambda
    02:54 - Класс Closure
    06:01 - Синтаксис Closure
    07:51 - Closure method reference
    08:13 - Default method params value
    08:44 - Closure bytecode
    10:57 - Класс Reference
    12:57 - Groovy DSL

  • 10. Оператор if-else9:07

    Продолжаем разбираться с базовыми концепциями языков программирования и на очереди у нас условные операторы if-else и их отличия от Java. Оказывается, что теперь не обязательно помещать в if что-то, что является типом данных boolean. На видео разберем, как именно это ограничения обошли разработчики Groovy. Также увидим, как улучшили тернарный оператор в тех случаях, которые довольно часто встречаются на практике. 

    00:00 - Введение
    00:17 - Java if-else
    00:59 - Groovy if-else
    03:13 - Метод asBoolean
    05:10 - if-else bytecode
    06:17 - null-safe operator "?."
    07:16 - Elvis operator "?:"

  • 11. Оператор switch8:17

    Также как и оператор if-else, разработчики Groovy дошли до улучшения оператора switch. Теперь мы вновь ушли от ограничений Java с определенным набором типов данных, что мы можем использовать в switch. Более того, это улучшение позволило добавить функционал и в другие области языка программирования, про которые будет говорить в последующих видео этого курса. 

    00:00 - Введение
    00:34 - Java switch
    01:10 - Groovy switch
    04:54 - switch bytecode
    05:22 - Метод isCase
    07:29 - Оператор in

  • 12. Loops. Циклы9:51

    В Groovy внесли изменения и в привычные нам конструкции циклов (в основном цикл for). Но на практике в функциональном стиле для коллекций в основном все равно будут использоваться замыкания (Closure). Поэтому начнем с самых простейших методов, которые можно использовать вместо циклов for. В последующих видео увидим, как и что сделано в различных структурах данных. 

    00:00 - Введение
    00:15 - Java loops
    01:18 - Groovy index for loop
    02:25 - Groovy foreach loop
    03:32 - Методы upTo & downTo
    04:50 - Методы times & step
    06:06 - Класс DefaultGroovyMethods
    07:39 - Класс CallSite

  • 13. Lists. Списки10:48

    Разработчики Groovy решили объединить удобство инициализации массивов в Java и функционал интерфейса List. В итоге получилось действительно лаконично и удобно работать со списками. Более того, их обогатили новыми методами из очередей и теории множеств. Конечно же, добавилось много синтаксического сахара и новые операторы. В конце занятия вновь зайдем в bytecode чтобы понять, как все работает под капотом. 

    00:00 - Введение
    00:27 - Инициализация списков
    01:32 - Чтения данных в списках
    03:52 - Запись данных в списках
    06:06 - Методы очередей
    06:57 - Методы множеств
    08:57 - Новые операторы
    10:15 - bytecode

  • 14. Maps. Ассоциативные массивы7:52

    Map - это одна из лучших структур данных, которых придумало человечество. Но в Java довольно сложно их инициализировать, не так удобно читать и записывать данные. В Groovy конечно же попытались решить все эти проблемы и на видео мы как всегда продемонстрируем все новшество. И конечно же поговорим про новый spread operator. 

    00:00 - Введение
    00:24 - Инициализация Map
    02:34 - Чтение данных в Map
    05:12 - Запись данных в Map
    05:34 - Новые метод subMap
    06:52 - Новый оператор spread

  • 15. Ranges. Диапазоны6:21

    В Groovy добавили новую коллекцию, которая называется Range. Она невероятно упрощают работу с теми кусочками кода, которые требую указания диапазона. Мы уже встречали их на примере выбора подстрок или под списков, что выглядело гораздо удобнее и интуитивно понятнее, чем тот же функционал в Java. На видео также попробуем написать свой Range и посмотрим, как они устроены под капотом. 

    00:00 - Введение
    00:30 - Новая коллекция Range
    01:10 - Инициализация объекта Range
    01:55 - Методы класса Range
    03:56 - Range символов
    04:27 - Написание собственного Range
    06:11 - Резюме

  • 16. Object iteration8:59

    В Groovy решили пойти очень интересной концепцией: любой объект представляется в виде коллекции из одного значения. Благодаря такому подходу, которые принят не только в этом языке программирования, можно привнести довольно интересный функционал, что мы и разберем в видео. Все эти полезные методы лежат в утилитном классе DefaultGroovyMethods, про который мы еще будем неоднократно разговаривать в следующих видео, когда будем разбирать динамическую составляющую языка Groovy и как это работает через MetaClass. 

    00:00 - Введение
    01:03 - Object iteration methods
    03:07 - Object iteration practice
    05:47 - grep
    08:30 - Резюме

  • 17. Объектно Ориентированное Программирование10:21

    Вот мы и дошли до нововведений в Groovy, касающиеся ООП. Т.к. Java - это объектно-ориентированный язык, следовательно, есть довольно много мест, где мы можем упростить код. Кроме очередной порции синтаксического сахара, Groovy вновь добавляет новые концепции и использование уже встречаемого нами spread operator. На видео как обычно все подробно разберем на примерах. 

    00:00 - Введение
    00:15 - Модификаторы доступа и поля в Groovy классах
    03:00 - Конструктор Map
    04:46 - Coercion
    06:58 - Multiple assignment
    08:28 - Spread operator
    09:49 - Резюме

  • 18. Trait. Mixin9:06

    Как мы знаем, в Java нет множественного наследования, но возможно реализовывать множество интерфейсов одним классом. Споры о том, хорошо или плохо, наверное, не утихнут никогда. Тем не менее в Groovy ввели новое понятие Trait, который невероятно похож на интерфейсы с дефолтными методами, которые появились в Java 8, но позволяет еще и добавлять поля! А т.к. это обычный интерфейс в байткоде (мы в этом убедимся в видео), то получается, что мы все-таки можем имитировать множественное наследование. Также поговорим про разницу в JavaBeans и GroovyBeans specification. 

    00:00 - Введение
    00:15 - JavaBeans specification
    01:05 - GroovyBeans specification
    01:47 - Trait
    04:30 - Trait bytecode
    05:20 - Метод getProperties
    06:30 - Аннотация @Mixin - deprecated
    07:03 - Runtime mixins

  • 19. IO. Exceptions8:13

    Класс File, что мы когда-то проходили на курсе Java level 2 - является базовым для представления файла или директории на жестком диске. В Groovy решили взять его за основу для работы с потоками ввода-вывода и привнести довольно большой объем новых методов с помощью утилитного класса ResourceGroovyMethods (как они эти методы появляются в других классах вроде File - мы подробно обсудим еще в следующих видео). Более того, появилась довольно интересная концепции, чтобы не закрывать потоки ввода-вывода после их использования. Также на видео поговорим насчет преимущества использования unchecked exceptions. 

    00:00 - Введение
    00:19 - Класс File. Чтения данных
    03:30 - Класс File. Запись данных
    05:56 - Traversing
    07:40 - Резюме

  • 20. AST transformations9:20

    AST (Abstract Syntax Tree) - это ключевой момент в понимании того, как устроены большинство компиляторов современных языков программирования. На этом видео мы немного углубимся в них, чтобы понять, как это устроено все под капотом. А также как мы можем использовать аннотации, которые работают поверх AST, добавляя кучу разного кода перед тем, как AST преобразуется в байт код (Lombok, которые мы проходили на курсе по HTTP Servlets работает точно таким же способом - изменяет AST перед тем, как преобразуется в байт код). 

    00:00 - Введение
    00:40 - Groovy Parser
    02:04 - Abstract Syntax Tree
    04:36 - AST аннотации
    06:14 - AST bytecode
    07:06 - Исходный код @ToString
    08:51 - Резюме

  • 21. Dynamic programming. MOP8:34

    Как мы знаем, Groovy - это JVM язык, следовательно, он должен быть невероятно похож на Java, т.к. компилируется в байт код. Тогда каким образом можно было изменить на столько природу языка Groovy: привнести динамическую составляющую. Ведь Java - это чисто статический язык, и после компиляции невозможно добавить/изменить функционал в классах. А все на самом деле просто - добавлена специальная прослойка MOP (Meta Object Protocol), и все вызовы из Groovy классов проксируются через вспомогательные классы MOP. 

    00:00 - Введение
    00:27 - Динамическое программирование
    01:09 - Meta Object Protocol
    03:48 - Сравнение javac и groovyc
    05:21 - Практика

  • 22. MetaClass12:04

    Ключевое момент в понимании того, каким образом появляются новые методы в классах, которые не содержат их, или каким образом можно эти методы добавить в runtime или изменить их - это специальный класс MetaClass, который есть во всех классах, даже в Java Core. На видео сами попробуем создать свой MetaClass и добавим туда метод сторонних классов, чтобы лучше разобраться в этом. И конечно же рассмотрим основные уже существующие в Groovy реализации класса MetaClass. 

    00:00 - Введение
    00:35 - Создание CustomMetaClass
    05:18 - Класс MetaClassImpl
    05:56 - Класс ExpandoMetaClass
    10:31 - Класс ProxyMetaClass
    11:05 - Резюме

  • 23. Missing method and property8:23

    Хоть и кажется, что код на Groovy компилируется почти всегда, потому что присутствие методов и полей в классах определяется только в runtime, проходя через MOP, но тем не менее, нужно понимать, что происходит в том случае, когда все-таки какие-то методы и поля не нашлись в наших MetaClass. Для этого конечно же уже существует функционал - это методы propertyMissing и methodMissing. В видео на практике посмотрим, как можно использовать эти 2 метода для своих нужд. 

    00:00 - Введение
    00:56 - Метод methodMissing
    03:23 - Метод propertyMissing
    04:15 - Пример использования propertyMissing
    05:27 - Пример использования methodMissing
    08:02 - Резюме

  • 24. Categories7:35

    В предыдущей лекции, где мы проходили Mixins и Traits, мы говорили, что есть возможность привносить новый функционал только тогда, когда мы сами этого захотим (временно), а не сразу для всех объектов класса на постоянной основе. Для этого у нас есть специальный инструмент Category. На видео как обычно на практике разберем все нюансы категорий. 

    00:00 - Введение
    00:39 - Аннотация @Category
    02:33 - Метод use
    04:10 - bytecode
    05:05 - Полная сигнатура @Category метода

  • 25. Closure. Часть 211:12

    Во второй части темы замыканий (Closure) мы увидим другую, более мощную сторону их. После чего мы не будем смотреть на них как просто аналог лямбда выражений в Java. Более того, эти возможности являются ключевыми в понимании устройства многих шаблонов проектирования в Groovy, особенно Builder. И конечно же ключевым в понимании DSL (Domain Specific Language), который мы будем рассматривать в отдельном видео. 

    00:00 - Введение
    00:25 - Поля thisObject, owner, delegate
    02:40 - Closure bytecode
    03:30 - Шаблон проектирования Delegate
    05:14 - Поле resolveStrategy
    07:15 - Метод with
    08:03 - Разница между thisObject и owner
    10:30 - 2 этапа closure: declaration и execution

  • 26. Практика21:54

    Вот мы и дошли до практического занятия, где попробуем закрепить полученные знания с предыдущих лекций, особенно более сложные темы: динамического программирования и метаклассов, замыкай и их невероятной возможности делегировать вызовы другим объектам (owner, delegate). Также увидим, как можно использовать категории (Category) как альтернативный вариант, вместо изменения метаклассов.

    00:00 - Введение
    00:16 - Задача №1
    05:28 - Задача №2. Решение №1
    09:06 - Задача №2. Решение №2
    12:10 - Задача №3
    20:01 - Резюме

  • 27. DSL. Domain Specific Language14:04

    Одна из самых интереснейших тем в Groovy, которую мы по крайней мере можем теперь освоить, оглядываясь на весь пройденный материал до этой темы. И конечно же, именно понимание DSL открывает путь к успешному усвоению других инструментов, с которыми столкнется каждый Java разработчик - это Gradle и Jenkins. На видео создадим свой Email DSL для конструированию объекта по отправке email. 

    00:00 - Введение
    00:53 - Разница между кодом и DSL
    04:10 - Реализация Email DSL
    12:00 - Тестирование функционала
    12:58 - Аннотация @DelegateTo
    13:49 - Резюме

  • 28. Заключение. Путь развития6:22

    В заключительном видео курса по Groovy мы по традиции поговорим о том, что мы знаем на текущий момент, что мы умышленно опустили во время изучению и почему. Конечно же обсудим, к каким инструментам Groovy и его DSL открывает нам дорогу к пониманию и дальнейшему изучению.

    00:00 - Введение
    00:22 - Что мы узнали после прохождения курса
    04:00 - Что еще нужно освоить
    04:54 - Скорость работы Groovy в сравнении с Java
    05:55 - Резюме

Requirements

  • Знание языка программирования Java

Description

Курс Groovy содержит информацию о другом объектно-ориентированном языке программирования, который является дополнением к языку Java. С ним будет сталкиваться любой Java разработчик, потому что язык Groovy является ключевым для понимания таких инструментов как:
- Gradle (один из лучших инструментов сборки проектов для JVM-based языков программирования)
- Jenkins (самый популярный Continuous Integration / Continuous Delivery инструмент).
Более того, этот язык содержит много новых парадигм и подходов в разработке программного обеспечения, что поможет по-новому взглянуть на решаемые задачи. Например:
- Groovy специализируется на том, что является динамическим языком программирования (изменение классов и объектов во время выполнения программы, а не во время компиляции как в Java)
- Также в нем намного лучше проработана функциональное программирование благодаря концепции Closure (замыканий). Closure с первого взгляда очень напоминают собой Lambda выражения в Java, но на самом деле они гораздо мощнее.
- И конечно же своей популярностью этот язык обязан именно его непревзойденному и лаконичному DSL (Domain Specific Language), который реализован теми же самыми Closure и их функционалу делегирования.
По окончании курса вы будете уверенно владеть новым для вас языком программирования Groovy, который очень вам пригодится в реальных проектах. Вы поймете, что этот язык предоставляет вам выбор в использовании функционального или императивного подхода, статического или динамического программирования - в зависимости от решаемой задачи, чтобы наиболее эффективно реализовать ее.

Who this course is for:

  • Разработчики Java, которые хотят в последующем разобраться с Gradle, Jenkins или уйти в сторону Groovy и его экосистемы