Download ppt - Groovy On Grails

Transcript
Page 1: Groovy On Grails

Groovy on Grails

Groovy — объектно-ориентированный язык программирования, разработанный для платформы Java, как альтернатива языку Java с возможностями Python, Ruby и Smalltalk.

«Меньше «скучного» оформительского кода – больше простых, читаемых и элегантных решений»

HelloWorld:println "Hello world!" // ";" можно не ставить

Page 2: Groovy On Grails

Строки

def age = 20def simpleStr = 'My age is $age' // Значение - "My age is $age"def interpStr = "My age is $age" // Значение - "My age is 20"

def multiline = '''First lineSecond lineThird line'''

Page 3: Groovy On Grails

Ranges

def rng = 1..10

rng.size() // Получение длиныrng.contains(5) // Проверить наличие элементаrng.from // Получить началоrng.top // Получить конец

Page 4: Groovy On Grails

Списки

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}

Page 5: Groovy On Grails

Коллекции других типов

def linkedList = [1,2,3] as LinkedListdef set = [1,2,3] as Setdef array = [1,2,3] as Integer[]

Spread Operator: [1,2,3]*.Plus(5) // Результат [6,7,8]

Page 6: Groovy On Grails

Maps

def someMap = [ 'a' : 1, 'b' : 2 ] // Объявлениеdef emptyMap = [:] // Объявление пустого отображения someMap['a'] // Доступ к элементуsomeMap.a // Доступ к элементу как к полю someMap['a'] = 2 // Изменение элементsomeMap.a = 2 // Изменение элемента, как поля

Page 7: Groovy On Grails

Замыкания

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 ++ }}

Page 8: Groovy On Grails

Встроенные переменные

В любых замыканиях всегда определены несколько переменных, имеющих специальный смысл:

• it — это единственный аргумент замыкания. Использование этой переменной позволяет опускать объявление аргументов в замыкании. Например: def pr = { println it } // Замыкание, распечатывающее свой первый аргумент

• this — это ссылка на класс, в котором объявлено замыкание

• owner — это объект, содержащий контекст в котором объявлено замыкание. Значение - или this, если замыкание объявлено внутри класса или метода, или замыкание, внутри которого находится объявление замыкания.

• delegate — то же самое, что и owner, однако может быть переопределено, что используется в Builders

Page 9: Groovy On Grails

Currying и динамические объекты

Curring — возможность получить новое замыкание, зафиксировав часть аргументов старого. Например: 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" } // Добавляем новый метод к объекту

Page 10: Groovy On Grails

Создание классов и «фишка» оператора If

class Greet { def name Greet(who) { name = who[0].toUpperCase() + who[1..-1] } def salute() { println "Hello $name!“ }}

g = new Greet('world') // create objectg.salute() // Output "Hello World!“

def x=1if (x=2) println “x=2″ // Exception

Page 11: Groovy On Grails

Особенности и «вкусности»

• Огромное количество уже написанного .• Syntax-sugar.• Перегрузка операторов.• Template Engine.• Alias.• Расширение любого класса, даже final.• Оператор safe navigation.• Duck-typing.• Currying.• Gpath.• Встроенный Ant.• XML – RPC & GroovyWS & Gdata & Jabber RPC.• GroovyMock & JUnit & TestNG.• Groovy Scriptom Groovy.

• Grails!

И многое другое…

Page 12: Groovy On Grails

Идеологическая поддержка

Page 13: Groovy On Grails

Grails

Grails — программный каркас для создания веб-приложений, написанный на языке Groovy

• Предоставить высокопродуктивный программный каркас для веб-разрабоки, для платформы Java.• Предложить непротиворечивый, единообразный каркас, что позволит избавиться от неопределённости и будет лёгок к изучению.• Документировать только те части фрэймворка, которые имеют значение для пользователей.• Предложить пользователям то, что они хотят видеть в областях часто сложных и противоречивых:

• Мощная и непротиворечивая поддержа персистенции (сохранности данных).• Мощные и лёгкие в использовании шаблоны страниц (view), использующие GSP.• Динамические библиотеки тегов для лёгкого создания компонентов веб-страниц.• Хорошая поддержка Ajax, легко расширяемая и настраиваемая под цели разработчика.

• Предоставить примеры приложений, которые демонстрируют возможности данного программного каркаса.• Обеспечить режим разработки, включающий встроенный веб-сервер и автоматическую перегрузку ресурсов.

Page 14: Groovy On Grails

Grails – Controller. Примеры

class TripController { ... def list = { if(!params.max) params.max = 10 [ tripList: Trip.list( params ) ] } …}

def save = { def trip = new Trip(params) if(!trip.hasErrors() && trip.save()) { flash.message = "Trip ${trip.id} created" redirect( action:show, id:trip.id ) } else { render( view:'create', model:[trip:trip] ) }}

Page 15: Groovy On Grails

Grails – Views. Примеры

<g:each in="${tripList}" status="i" var="trip"> <tr class="${(i % 2) == 0 ? 'odd' : 'even'}"> <td> <g:link action="show" id="${ trip.id }">${ trip.id?.encodeAsHTML() }</g:link> </td> </tr></g:each>

Page 16: Groovy On Grails

Grails – Model. Примеры

class Airline { static constraints = { name (blank:false, maxSize:100) url (url:true) frequentFlyer (blank:true) notes (maxSize:1500) }

static hasMany = [trip:Trip] String name String url String frequentFlyer String notes

String toString(){ return name }}

Page 17: Groovy On Grails

Grails – TagLib. Примеры

class DateTagLib { def thisYear = { out << Calendar.getInstance().get(Calendar.YEAR) }}

<div id="copyright">&copy; 2002 - <g:thisYear />, FakeCo Inc. All Rights Reserved.</div>

class DateTagLib { def thisYear = { out << Calendar.getInstance().get(Calendar.YEAR) }

def copyright = { attrs, body -> out << "<div id='copyright'>" out << "&copy; ${attrs['startYear']} - ${thisYear()}, ${body()}" out << " All Rights Reserved." out << "</div>" }}


Recommended