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

Like this? Share it with your network

Share

Groovy On Grails

on

  • 2,721 views

 

Statistics

Views

Total Views
2,721
Views on SlideShare
2,720
Embed Views
1

Actions

Likes
0
Downloads
7
Comments
0

1 Embed 1

http://www.slideshare.net 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Groovy On Grails Presentation 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; } }