Your SlideShare is downloading. ×
0
Groovy  on Grails Groovy  — объектно-ориентированный язык программирования, разработанный для платформы Java, как альтерна...
Строки def  age = 20 def  simpleStr =  'My age is $age'  //  Значение  - "My age is $age" def  interpStr =  &quo...
Ranges def  rng = 1..10 rng. size ()  // Получение длины rng. contains (5)  // Проверить наличие элемента rng. from   // П...
Списки def  someList = [1,2,3,4]  // Создание списка def  emptyList = []  // Создание пустого списка someList[0]  // Обращ...
Коллекции других типов def  linkedList = [1,2,3] as LinkedList def  set = [1,2,3] as Set def  array = [1,2,3] as Integer[]...
Maps def  someMap = [  'a'  : 1,  'b'  : 2 ]  // Объявление def  emptyMap = [:]  // Объявление пустого отображения   someM...
Замыкания new  File( 'file.txt' ).eachLine( { line -> println line } )  // Распечатываем каждую строку файла def  plus = {...
Встроенные переменные <ul><li>В любых замыканиях всегда определены несколько переменных, имеющих специальный смысл: </li><...
Currying  и динамические объекты C urring  — возможность получить новое замыкание, зафиксировав часть аргументов старого. ...
Создание классов и «фишка» оператора  If class  Greet { def  name Greet(who) { name = who[0].toUpperCase() + who[1..-1] } ...
Особенности и «вкусности» <ul><li>Огромное количество уже написанного . </li></ul><ul><li>S yntax-sugar . </li></ul><ul><l...
Идеологическая поддержка
Grails <ul><li>Grails  — программный каркас для создания веб-приложений, написанный на языке Groovy </li></ul><ul><li>Пред...
Grails – Controller.  Примеры class  TripController { ... def  list = { if(!params.max) params.max = 10 [ tripList: Trip.l...
Grails – Views.  Примеры < g:each  in =&quot;${tripList}&quot;  status= &quot;i&quot;  var= &quot;trip&quot; > <tr class=&...
Grails – Model.  Примеры class  Airline {  static  constraints = { name (blank:false, maxSize:100) url (url:true) frequent...
Grails – TagLib.  Примеры class  DateTagLib { def  thisYear = { out << Calendar.getInstance().get(Calendar.YEAR) } } <div ...
Upcoming SlideShare
Loading in...5
×

Groovy On Grails

1,879

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,879
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Groovy On Grails"

  1. 1. Groovy on Grails Groovy — объектно-ориентированный язык программирования, разработанный для платформы Java, как альтернатива языку  Java с возможностями Python , Ruby  и Smalltalk . «Меньше «скучного» оформительского   кода – больше простых, читаемых и элегантных решений» HelloWorld: println &quot;Hello world!&quot; // &quot;;&quot; можно не ставить
  2. 2. Строки def age = 20 def simpleStr = 'My age is $age' // Значение - &quot;My age is $age&quot; def interpStr = &quot;My age is $age&quot; // Значение - &quot;My age is 20&quot; def multiline = ''' First line Second line Third line '''
  3. 3. Ranges def rng = 1..10 rng. size () // Получение длины rng. contains (5) // Проверить наличие элемента rng. from // Получить начало rng. top // Получить конец
  4. 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. 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. 6. Maps def someMap = [ 'a' : 1, 'b' : 2 ] // Объявление def emptyMap = [:] // Объявление пустого отображения   someMap[ 'a' ] // Доступ к элементу someMap.a // Доступ к элементу как к полю   someMap[ 'a' ] = 2 // Изменение элемент someMap.a = 2 // Изменение элемента, как поля
  7. 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. 8. Встроенные переменные <ul><li>В любых замыканиях всегда определены несколько переменных, имеющих специальный смысл: </li></ul><ul><li>it  — это единственный аргумент замыкания. Использование этой переменной позволяет опускать объявление аргументов в замыкании. Например: </li></ul><ul><li>def pr = { println it } // Замыкание, распечатывающее свой первый аргумент </li></ul><ul><li>this   — это ссылка на класс, в котором объявлено замыкание </li></ul><ul><li>owner   — это объект, содержащий контекст в котором объявлено замыкание. Значение - или this, если замыкание объявлено внутри класса или метода, или замыкание, внутри которого находится объявление замыкания. </li></ul><ul><li>delegate   — то же самое, что и owner, однако может быть переопределено, что используется в Builders </li></ul><ul><li>  </li></ul>
  9. 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. 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. 11. Особенности и «вкусности» <ul><li>Огромное количество уже написанного . </li></ul><ul><li>S yntax-sugar . </li></ul><ul><li>Перегрузка операторов. </li></ul><ul><li>Template Engine. </li></ul><ul><li>Alias. </li></ul><ul><li>Расширение любого класса, даже final. </li></ul><ul><li>Оператор safe navigation . </li></ul><ul><li>Duck - typing . </li></ul><ul><li>Currying . </li></ul><ul><li>G p ath . </li></ul><ul><li>Встроенный Ant . </li></ul><ul><li>XML – RPC & GroovyWS & Gdata & Jabber RPC . </li></ul><ul><li>GroovyMock & JUnit & TestNG . </li></ul><ul><li>Groovy Scriptom  Groovy. </li></ul><ul><li>Grails! </li></ul><ul><li>И многое другое… </li></ul>
  12. 12. Идеологическая поддержка
  13. 13. Grails <ul><li>Grails  — программный каркас для создания веб-приложений, написанный на языке Groovy </li></ul><ul><li>Предоставить высокопродуктивный программный каркас для веб-разрабоки, для платформы  Java . </li></ul><ul><li>Предложить непротиворечивый, единообразный каркас, что позволит избавиться от неопределённости и будет лёгок к изучению. </li></ul><ul><li>Документировать только те части фрэймворка, которые имеют значение для пользователей. </li></ul><ul><li>Предложить пользователям то, что они хотят видеть в областях часто сложных и противоречивых: </li></ul><ul><ul><li>Мощная и непротиворечивая поддержа персистенции (сохранности данных). </li></ul></ul><ul><ul><li>Мощные и лёгкие в использовании шаблоны страниц (view), использующие GSP. </li></ul></ul><ul><ul><li>Динамические библиотеки тегов для лёгкого создания компонентов веб-страниц. </li></ul></ul><ul><ul><li>Хорошая поддержка  Ajax , легко расширяемая и настраиваемая под цели разработчика. </li></ul></ul><ul><li>Предоставить примеры приложений, которые демонстрируют возможности данного программного каркаса. </li></ul><ul><li>Обеспечить режим разработки, включающий встроенный веб-сервер и автоматическую перегрузку ресурсов. </li></ul>
  14. 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. 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. 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. 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; } }
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×