Minicurso groovy grails

  • View
    9.675

  • Download
    2

Embed Size (px)

DESCRIPTION

O fato de existirem inmeras linguagens que rodam na JVM j no novidade nenhuma, principalmente com o sucesso de Scala e JRuby. Seguindo a linha das principais linguagens do mercado, Groovy apresenta-se como uma tima alternativa para aqueles que querem tentar uma nova linguagem, mas ainda gostam na sintaxe Java. Ganhando popularidade nos ltimos tempos, Groovy uma linguagem dinmica inspirada em Python, Ruby e Smalltalk que pode ampliar e muito a produtivade em seu dia-a-dia. Quanto tempo voc leva para fazer um site utilizando as principais ferramentas Java? Pois em Grails isso pode ser ainda mais rpido! Inspirado no framework Ruby on Rails, Grails tem ganhado popularidade entre as opes para desenvolvimento web devido ao seu alto grau de integrao com a plataforma Java, e adicionando a isso conceitos como interceptors, tag libs, Groovy Servers Pages (GSP), alm de uma grande variedade de plugins para facilitar ainda mais o desenvolvimento web.

Transcript

  • 1. Groovy & Grails Victor Hugo Germano #lambda3 http://www.ickr.com/photos/montreal1976/4502659151

2. Quando voc programa em Groovy, de vrias formas voc est escrevendoum tipo especial de Java. -Dierk Knig Groovy in Action 3. Integrao transparentecom Java Suporta Tipagem Estticabytcode GroovySintaxe Similar Linguagem Dinmica para JVM Meta Object Protocol 4. le.groovyle.javabytecode bytecode The Java Virtual Machine 5. http://www.ickr.com/photos/oskay/472097903/ 6. Uma classe em Javapublic class HelloWorld {private String name; public String getName() {return name;}public void setName(String message) {this.name = message;}public String message() {return "Hello World of "+this.name;}public static void main(String[] args) {HelloWorld hello = new HelloWorld();hello.setName("Grooooooovy");System.out.println(hello.message());}} 7. A mesma classe em Groovyclass HelloWorld {String namedef message() { "Hello World of $name"}}def hello = new HelloWorld(name:"Grooovy")println hello.message() 8. http://www.ickr.com/photos/noideas/2323222802/ Conceitos Bsicos 9. Conceitos BsicosSe voc j programa em Java, voc j programa em Groovy!http://www.ickr.com/photos/jeyp/4149695639 10. Conceitos Bsicosclass Pessoa {String nomeint idade}void setIdade(idade) {this.idade = idade - 4}new Pessoa ( nome: Z, idade: 7) 11. Conceitos Bsicosdef today = new Date()def tomorrow = today + 1assert today.before(tomorrow)assert tomorrow.after(today) 12. Operator Overloadinga+ba.plus(b)a-b a.minus(b)a/ba.multiply(b)a%ba.modulo(b)a ** b a.power(b)a&ba.and(b) a[b] a.getAt(b) 13. Operator Overloadingclass Pedido { def total def plus(Pedido pedido) {def result = this.total + pedido.totalnew Pedido(total:result) } }def pedido1 = new Pedido(total: 10) def pedido2 = new Pedido(total: 50)def pedido3 = pedido1 + pedido2println pedido3.total 14. Special OperatosElvis operatordef displayName = user.name ? user.name : No onedef displayName = user.name ?: No one Operador Segurode Navegao def addr = user?.address?.toUppercase() 15. Groovy Stringshttp://www.ickr.com/photos/elianarei/3904613032/ 16. Groovy Stringspublic String displayString() {return + title + by +authorName + , ( +numberOfPages + pages);}Interpolao String displayString() { $title by $authorName, ($numberOfPages pages); } 17. Groovy Strings String displayMultiLineString() { $titleby $authorName,($numberOfPages pages); } 18. Collections http://www.ickr.com/photos/wisekris/183438282/ 19. Collections def frutas = [Banana , Pera, Ma ] def countries = [ br: Brazil, us: United States, ie: Ireland ]println countries.br 20. Collections for (c in countries) { println c } countries.each {println it } 21. Collections def list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] def sublist = list[0..5] def square = { it * 2 } [1, 2, 3].collect(square)== [2, 4, 6] 22. Collections private List books; public List findByISBN(String isbnCode) { Book result = null; if(books != null && isbnCode != null) { for (Book book : books) { if(book != null && isbnCode.equals(book.getISBN()) ) { result = book; break; } } } return result;} 23. Collections List books; Book findByISBN(String isbnCode){ books?.find({it?.isbn == isbnCode}); }List books; List findAllByAuthor(String authorName){ books?.findAll({ it?.author == authorName }) } 24. Groovy Truth 25. Groovy Truth def a = true def a = false assert a assert !b 26. Groovy Truth def numbers = [] assert numbers // falsedef numbers = [1, 2, 3] assert numbers // trueColees Vazias! 27. Groovy Truth assert Verdadeiro // trueassert // falseStrings! 28. Groovy Truth assert null // false assert 0 // falseassert (new Object()) // true assert 1 // true Objetos e Nmeros! 29. Closureshttp://www.ickr.com/photos/brizzlebornandbred/4262145162/ 30. Closures { Bloco de CdigoouPointeiro para um Mtodo } 31. Closures def refParaClosure ={ parametros -> //Cdigo.. }refParaClosure(p1, p2...) 32. Lets play!http://www.ickr.com/photos/rogerss1/3232663848 33. Arquivos 34. Em Java!!!! 35. importjava.io.*; classFileRead { publicstaticvoidmain(Stringargs[]) { try{ //Openthefilethatisthefirst //commandlineparameter FileInputStreamfstream=newFileInputStream("textfile.txt"); //GettheobjectofDataInputStream DataInputStreamin=newDataInputStream(fstream); BufferedReaderbr=newBufferedReader(newInputStreamReader(in)); StringstrLine; //ReadFileLineByLine while((strLine=br.readLine())!=null){ //Printthecontentontheconsole System.out.println(strLine); } //Closetheinputstream in.close(); }catch(Exceptione){//Catchexceptionifany System.err.println("Error:"+e.getMessage()); } } } 36. deffile = new File("textfile.txt")file.eachLine { line ->println line } moonbug.org 37. Arquivos deffile = new File("textfile.txt") file } ]cuidar(fakePato as Pato) 41. Metaprogramao 42. M.O.P. Meta Object ProtocolCriando cdigo gerador de cdigo 43. MetaprogramaoMetaClass ExpandoClass getProperty / setProperty invokeMethod / invokeStaticMethodmethodMissing 44. Metaprogramao"Florianpolis".totalDeLetras()String.metaclass { totalDeLetras = { delegate.size() } } 45. Builders import groovy.xml.MarkupBuilderdef mkp = new MarkupBuilder() mkp.html { head { title "Minicurso G&G" } body { div(class:"container") { p "Lambda3 & Globalcode going dynamic!" }} } 46. http://www.ickr.com/photos/ttdesign/343167590 AST Transformation 47. AST Transformation Metaprogramao em tempo de compilao public class T { public static final T instance = new T(); private T() {} public T getInstance() { (...) } }@Singleton class T { } 48. AST Transformation class Pessoa {class Endereco { String nome String rua @Delegate String cidade Endereco endereco String pais } }def pessoa = new Pessoa()pessoa.rua = Avenida Paulistapessoa.cidade = Sao Paulopessoa.pais = Brasil 49. http://www.ickr.com/photos/jerica_chingcuangco/3659719599 Can you feel it? 50. GRAILS 51. Outro Framework Web?!JSPWidgetSombreroStruts JSF OpenXavaTurbine SwingWeb VRaptorCocoon Calyxo WebOnSwing Wicket Maverick Tapestryhttp://www.ickr.com/photos/nwardez/3089933582/in/photostream/ 52. Java Web Development JSPWidget OpenXava Turbine JSF JEE StrutsSombrero SwingWeb 1999 VRaptor CocoonCalyxoWicketWebOnSwing Tapestry Maverick http://www.itexto.net/devkico/?p=224 53. Java Web DevelopmentHibernate JEE Gerenciar 1999 Complexidade Spring Aqui js Java para http://www.itexto.net/devkico/?p=224 Web 54. Convenes Full Stack ScaffoldingExtensibilidadehttp://www.itexto.net/devkico/?p=224 55. Migrar tudo paraRails? 56. Experincia Flexibilidade 57. GRAILShttp://grails.org Groovy a linguagem base Convenes!!Ambiente Completo (Full Stack) Extensibilidade 58. Full Stack Grails Groovy Java EnterpriseEdition (JEE)Spring Hibernate SiteMesh The JavaThe Java LanguageDevelopment Kit(JDK)The Java Virtual Machine 59. Show me some code!!http://www.ickr.com/photos/outime/4250568447 60. grails create-app librarygrails create-domain-class library.Book grails create-controller library.Book grails generate-all library.Bookgrails run-app 61. Forma & Contedo 62. Congurao environments { development { dataSource { dbCreate = "create-drop" url = "jdbc:hsqldb:mem:devDB" } } test { dataSource { dbCreate = "update" url = "jdbc:hsqldb:mem:testDb" } } production { dataSource { dbCreate = "update" url = "jdbc:hsqldb:file:prodDb;shutdown=true" } } } 63. Modelagem de Domnio Active Record patternGROM Groovy Relational Object Mapping Dynamic FindersValidations Hibernate Criterias 64. Request HandlingResponse / rendering Controllers Pense em Servlets, s que melhores!Negociao de ContedoData BindingInterceptors 65. Parecido com JSPs e ASP HTML + GSP tags + Taglibs ViewsLayouts & Templates Embedded Groovy Code MAS NO FAA! 66. Fcil e simples! Similar ao Routes do Rails URL Mapping ValidationsURL Encoding 67. Transacionais por padro Guargam Regras de NegcioService LayerDiferenciados por EscopoDependency Injection 68. Testing http://www.ickr.com/photos/busyprinting/4671731838 69. Plugins 70. IDEs http://www.ickr.com/photos/22280677@N07/2504310138/ 71. Comunidadehttp://www.ickr.com/photos/badwsky/48435218/ 72. Comunidadehttp://groovy.codehaus.org http://grails.org http://grailsbrasil.com/ http://github.com/grails/grails-coreGrails: um guia rpido e indireto 73. T, e da? Quem usa de Verdade? 74. Quem usa de Verdade? http://www.wired.com/http://www.sky.com/ http://iiea.com http://cmrf.orghttp://grails.org/Testimonials 75. Obrigado!twitter.com/victorhg www.lambda3.com.brUse it! Share it! Remix it!