https://www-tutorialspoint-com.translate.goog/groovy/index.htm?_x_tr_sl=en&_x_tr_tl=ru&_x_tr_hl=ru&_x_tr_pto=sc
https://www.baeldung.com/groovy-lists
- Все является объектами, все примитивные типы сразу же упаковываются в объекты
- все упаковочные типы неизменяемые, каждый раз при каком либо вычислении будет создаваться новый объект
- Groovy Strings (GStrings) можно вставлять параметры
- К строчкам применимы операции сложения и умножения, а так же инкремент/декремент
- На уровне конструкций языка поддерживаются регулярные выражения
- Встроенная поддержка maps и list
- Поддерживает Ranges
// GStrings str1 = "${variable}" str2 = "${2+2}" // maps и list a = [1, 2, 3] ==> [1, 2, 3] b= [1: true, 0: false] ==> {1=true, 0=false}
Циклы
for (1 in 0..9) { print i } for (int i=0; i<9; ++i) { print i } for (Integer i: 0..9){ print i }
Доступно большое кол-во методов для обработки последовательностей, к которым можно применять замыкание
'qwerty'.each { print it } ('a'..'z').each { print it } ('a'..'z').findAll {el -> // filter el in ['e', 'y', 'i'] }.each { print it + '' } (0..10).collect {el -> // = map el * 10 }.each { print it + '' } def sum = (0..10).inject(0) {prev, elem -> // = reduce return prev + elem }
Файлы
Для директорий есть ф-я eachFile и eachFileRecursive
// Список файлов в директории new File(.).eachFile{ print it } // Обработка текстовых файлов new File('textfile.txt').eachLine { print it }
В одинарных кавычках - Java Strings, внутри можно заключить двойные кавычки
В двойных кавычках - Groovy Strings (GStrings), как минимум, в такою строку можно подставить переменную, «внутри - ${}«
Объявляются путем перечисления элементов в квадратных скобках
def somw_list = [1, 2, 3, 4] def empty_list = [] // Обращение some_list[0] // Добавление новых элементов some_list[5] = 6 some_list << 7 << 8 some_list += [9, 19] // Совместно с range some_list[1..3] // срезка списка some_list[2..4] = [12, 13, 14] some_list[1, 2, 3..7, 8] // получение подсписка
Операции над списками
// Перебор for (e in some_list) { println e } some_list.each{ println it } some_list.eachWithIndex{ it, i-> println "$i : $it" }
Фильтрация
assertTrue(some_list.findAll{ it>3 } == 4) assertTrue(some_list.grep(Number) == [2,3,1,4,5,7]) some_list.unique()
Типы списков. По умолчанию ArrayList, можно объявить например LinkedList, HashSet или обычный массив Java
def linked_list = [1, 2, 3] as LinkedList def set = [1, 2, 3] as Set def array = [1, 2, 3] as Integer[]
Spread Operator
Вызов метода для каждого элемента списка
[1,2,3]*.plus(5) // каждый элемент увеличится на 5
Ассоциативный массив, словарь
def some_map = ['a':1, 'b':2] def some_map = [:] // пустой // Доступ some_map['a'] come_map.a some_map['a'] = 2 come_map.a = 2 // изменение как поля (?)
println args println args.length println args.getClass() println args[0] println args[0].length() println args[0].getClass() if ((args.length == 0) || (args[0].length() == 0)) { println "args must be set. error" System.exit(1) } println "this good - '${args[0]}'" /// /// вывод /usr/bin/groovy grov.groovy "ddd" [ddd] 1 class [Ljava.lang.String; ddd 3 class java.lang.String this good - 'ddd'