1. Groovy on Grails Groovy — объектно-ориентированный язык программирования, разработанный для платформы Java, как альтернатива языку Java с возможностями Python , Ruby и Smalltalk . «Меньше «скучного» оформительского кода – больше простых, читаемых и элегантных решений» HelloWorld: println "Hello world!" // ";" можно не ставить
2. Строки def age = 20 def simpleStr = 'My age is $age' // Значение - "My age is $age" def interpStr = "My age is $age" // Значение - "My age is 20" def multiline = ''' First line Second line Third line '''
3. Ranges def rng = 1..10 rng. size () // Получение длины rng. contains (5) // Проверить наличие элемента rng. from // Получить начало rng. top // Получить конец
4. Списки def someList = [1,2,3,4] // Создание списка def emptyList = [] // Создание пустого списка someList[0] // Обращение к элементу по индексу someList[5] = 6 // Добавление элемента в список someList << 7 << 8 // Добавление элементов в конец списка someList += [ 9, 10 ] // "Приклеивание" списка someList[1..3] // "Срезка" списка - получение подсписка someList[2..4] = [ 12, 13, 14 ] // Изменение подсписка someList[1,3,5..7,9] // Получение подсписка for ( e in someList ) { println e // Распечатываем все элементы списка someList }
5. Коллекции других типов def linkedList = [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) // Результат [6,7,8]
6. Maps def someMap = [ 'a' : 1, 'b' : 2 ] // Объявление def emptyMap = [:] // Объявление пустого отображения someMap[ 'a' ] // Доступ к элементу someMap.a // Доступ к элементу как к полю someMap[ 'a' ] = 2 // Изменение элемент someMap.a = 2 // Изменение элемента, как поля
7. Замыкания new File( 'file.txt' ).eachLine( { line -> println line } ) // Распечатываем каждую строку файла def plus = { a, b -> a + b } def do = { println "done" } def forEvery3rd( list, block ) { def i = 0 for ( e in list ) { if ( i % 3 == 0 ) block( i ) i ++ } }
8.
9. Currying и динамические объекты C urring — возможность получить новое замыкание, зафиксировав часть аргументов старого. Например: def add = { a, b -> a + b } // Замыкание - сложение двух объектов def add1 = add.curry( 1 ) // Замыкание - сложение единицы и одного из объектов Expando. Суть этих объектов в том, что они не имеют предопределенных полей и методов, однако они могут быть определены прямо в процессе выполнения def obj = new Expando(); obj.a = 1 // Создаем новое поле obj.b = 2 // Создаем новое поле obj. do = { println "done" } // Добавляем новый метод к объекту
10. Создание классов и «фишка» оператора If class Greet { def name Greet(who) { name = who[0].toUpperCase() + who[1..-1] } def salute() { println "Hello $name!“ } } g = new Greet( 'world' ) // create object g.salute() // Output "Hello World!“ def x=1 if (x=2) println “x=2″ // Exception