Groovy On Grails
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
2,769
On Slideshare
2,768
From Embeds
1
Number of Embeds
1

Actions

Shares
Downloads
7
Comments
0
Likes
0

Embeds 1

http://www.slideshare.net 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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 ] // &quot;Приклеивание&quot; списка someList[1..3] // &quot;Срезка&quot; списка - получение подсписка 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 &quot;done&quot; } def forEvery3rd( list, block ) { def i = 0 for ( e in list ) { if ( i % 3 == 0 ) block( i ) i ++ } }
  • 8. Встроенные переменные
    • В любых замыканиях всегда определены несколько переменных, имеющих специальный смысл:
    • it  — это единственный аргумент замыкания. Использование этой переменной позволяет опускать объявление аргументов в замыкании. Например:
    • def pr = { println it } // Замыкание, распечатывающее свой первый аргумент
    • this   — это ссылка на класс, в котором объявлено замыкание
    • owner   — это объект, содержащий контекст в котором объявлено замыкание. Значение - или this, если замыкание объявлено внутри класса или метода, или замыкание, внутри которого находится объявление замыкания.
    • delegate   — то же самое, что и owner, однако может быть переопределено, что используется в Builders
    •  
  • 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 &quot;done&quot; } // Добавляем новый метод к объекту
  • 10. Создание классов и «фишка» оператора If class Greet { def name Greet(who) { name = who[0].toUpperCase() + who[1..-1] }   def salute() { println &quot;Hello $name!“ } } g = new Greet( 'world' ) // create object g.salute() // Output &quot;Hello World!“ def x=1 if (x=2) println “x=2″ // Exception
  • 11. Особенности и «вкусности»
    • Огромное количество уже написанного .
    • S yntax-sugar .
    • Перегрузка операторов.
    • Template Engine.
    • Alias.
    • Расширение любого класса, даже final.
    • Оператор safe navigation .
    • Duck - typing .
    • Currying .
    • G p ath .
    • Встроенный Ant .
    • XML – RPC & GroovyWS & Gdata & Jabber RPC .
    • GroovyMock & JUnit & TestNG .
    • Groovy Scriptom  Groovy.
    • Grails!
    • И многое другое…
  • 12. Идеологическая поддержка
  • 13. Grails
    • Grails  — программный каркас для создания веб-приложений, написанный на языке Groovy
    • Предоставить высокопродуктивный программный каркас для веб-разрабоки, для платформы  Java .
    • Предложить непротиворечивый, единообразный каркас, что позволит избавиться от неопределённости и будет лёгок к изучению.
    • Документировать только те части фрэймворка, которые имеют значение для пользователей.
    • Предложить пользователям то, что они хотят видеть в областях часто сложных и противоречивых:
      • Мощная и непротиворечивая поддержа персистенции (сохранности данных).
      • Мощные и лёгкие в использовании шаблоны страниц (view), использующие GSP.
      • Динамические библиотеки тегов для лёгкого создания компонентов веб-страниц.
      • Хорошая поддержка  Ajax , легко расширяемая и настраиваемая под цели разработчика.
    • Предоставить примеры приложений, которые демонстрируют возможности данного программного каркаса.
    • Обеспечить режим разработки, включающий встроенный веб-сервер и автоматическую перегрузку ресурсов.
  • 14. 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 = &quot;Trip ${trip.id} created&quot; redirect( action:show, id:trip.id ) } else { render( view: 'create' , model:[trip:trip] ) } }
  • 15. Grails – Views. Примеры < g:each in =&quot;${tripList}&quot; status= &quot;i&quot; var= &quot;trip&quot; > <tr class=&quot;${(i % 2) == 0 ? 'odd' : 'even' }&quot;> <td> <g:link action=&quot;show&quot; id=&quot;${ trip.id }&quot;>${ trip.id?.encodeAsHTML() }</g:link> </td> </tr> </ g:each >
  • 16. 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 } }
  • 17. Grails – TagLib. Примеры class DateTagLib { def thisYear = { out << Calendar.getInstance().get(Calendar.YEAR) } } <div id=&quot;copyright&quot;> &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 << &quot;<div id='copyright'>&quot; out << &quot;&copy; ${attrs['startYear']} - ${thisYear()}, ${body()}&quot; out << &quot; All Rights Reserved.&quot; out << &quot;</div>&quot; } }