Minicurso groovy grails

11,595 views
10,796 views

Published on

O fato de existirem inúmeras linguagens que rodam na JVM já não é 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 dinâmica 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 rápido! Inspirado no framework Ruby on Rails, Grails tem ganhado popularidade entre as opções para desenvolvimento web devido ao seu alto grau de integração com a plataforma Java, e adicionando a isso conceitos como interceptors, tag libs, Groovy Servers Pages (GSP), além de uma grande variedade de plugins para facilitar ainda mais o desenvolvimento web.

Published in: Technology
3 Comments
8 Likes
Statistics
Notes
No Downloads
Views
Total views
11,595
On SlideShare
0
From Embeds
0
Number of Embeds
2,394
Actions
Shares
0
Downloads
349
Comments
3
Likes
8
Embeds 0
No embeds

No notes for slide

Minicurso groovy grails

  1. Groovy & Grails Victor Hugo Germano #lambda3 http://www.flickr.com/photos/montreal1976/4502659151
  2. “Quando você programa em Groovy, de várias formas você está escrevendo um tipo especial de Java.” -Dierk König Groovy in Action
  3. Integração transparente com Java Suporta Tipagem Estática bytcode Groovy Sintaxe Similar Linguagem Dinâmica para JVM Meta Object Protocol
  4. file.groovy file.java bytecode bytecode The Java Virtual Machine
  5. http://www.flickr.com/photos/oskay/472097903/
  6. Uma classe em Java public 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 Groovy class HelloWorld { String name def message() { "Hello World of $name" } } def hello = new HelloWorld(name:"Grooovy") println hello.message()
  8. http://www.flickr.com/photos/noideas/2323222802/ Conceitos Básicos
  9. Conceitos Básicos Se você já programa em Java, você já programa em Groovy! http://www.flickr.com/photos/jeyp/4149695639
  10. Conceitos Básicos class Pessoa { String nome int idade } void setIdade(idade) { this.idade = idade - 4 } new Pessoa ( nome: “Zé”, idade: 7)
  11. Conceitos Básicos def today = new Date() def tomorrow = today + 1 assert today.before(tomorrow) assert tomorrow.after(today)
  12. Operator Overloading a+b a.plus(b) a-b a.minus(b) a/b a.multiply(b) a%b a.modulo(b) a ** b a.power(b) a&b a.and(b) a[b] a.getAt(b)
  13. Operator Overloading class Pedido { def total def plus(Pedido pedido) { def result = this.total + pedido.total new Pedido(total:result) } } def pedido1 = new Pedido(total: 10) def pedido2 = new Pedido(total: 50) def pedido3 = pedido1 + pedido2 println pedido3.total
  14. Special Operatos Elvis operator def displayName = user.name ? user.name : “No one” def displayName = user.name ?: “No one” Operador Seguro de Navegação def addr = user?.address?.toUppercase()
  15. Groovy Strings http://www.flickr.com/photos/elianarei/3904613032/
  16. Groovy Strings public String displayString() { return “<u>” + title + “</u> by ” + authorName + “, (“ + numberOfPages + “ pages)”; } Interpolação String displayString() { “<u>$title</u> by $authorName, ($numberOfPages pages)”; }
  17. Groovy Strings String displayMultiLineString() { “““<u>$title</ul> by $authorName, ($numberOfPages pages)”””; }
  18. Collections http://www.flickr.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<Book> 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 // false def numbers = [1, 2, 3] assert numbers // true Coleções Vazias!
  27. Groovy Truth assert ‘Verdadeiro’ // true assert ‘’ // false Strings!
  28. Groovy Truth assert null // false assert 0 // false assert (new Object()) // true assert 1 // true Objetos e Números!
  29. Closures http://www.flickr.com/photos/brizzlebornandbred/4262145162/
  30. Closures { Bloco de Código ou Pointeiro para um Método }
  31. Closures def refParaClosure ={ parametros -> //Código.. } refParaClosure(p1, p2...)
  32. Let’s play! http://www.flickr.com/photos/rogerss1/3232663848
  33. Arquivos
  34. Em Java!!!!
  35. import java.io.*; class FileRead  {    public static void main(String args[])   {       try{     // Open the file that is the first      // command line parameter     FileInputStream fstream = new FileInputStream("textfile.txt");     // Get the object of DataInputStream     DataInputStream in = new DataInputStream(fstream);    BufferedReader br = new BufferedReader(new InputStreamReader(in));     String strLine;     //Read File Line By Line     while ((strLine = br.readLine()) != null)   {       // Print the content on the console       System.out.println (strLine);     }     //Close the input stream     in.close();     }catch (Exception e){//Catch exception if any       System.err.println("Error: " + e.getMessage());     }   } }
  36. def file = new File("textfile.txt") file.eachLine { line -> println line } moonbug.org
  37. Arquivos def file = new File("textfile.txt") file << ‘Escrevendo no arquivo’ def dir = new File("c:") dir.eachFile { println it }
  38. Duck Typing http://www.flickr.com/photos/catdonmit/2326033244/
  39. Duck Typing void cuidar(Pato pato) { pato.quack() pato.andar() pato.comer(new Comida(tipo: “peixe”)) }
  40. Duck Typing void fakePato = [ andar: { }, quack: { }, comer: { Comida c -> } ] cuidar(fakePato as Pato)
  41. Metaprogramação
  42. M.O.P. Meta Object Protocol Criando código gerador de código
  43. Metaprogramação MetaClass ExpandoClass getProperty / setProperty invokeMethod / invokeStaticMethod methodMissing
  44. Metaprogramação "Florianópolis".totalDeLetras() String.metaclass { totalDeLetras = { delegate.size() } }
  45. Builders import groovy.xml.MarkupBuilder def mkp = new MarkupBuilder() mkp.html { head { title "Minicurso G&G" } body { div(class:"container") { p "Lambda3 & Globalcode going dynamic!" } } }
  46. http://www.flickr.com/photos/ttdesign/343167590 AST Transformation
  47. AST Transformation Metaprogramação em tempo de compilação 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 Paulista” pessoa.cidade = “Sao Paulo” pessoa.pais = “Brasil”
  49. http://www.flickr.com/photos/jerica_chingcuangco/3659719599 Can you feel it?
  50. GRAILS
  51. Outro Framework Web?! JSPWidget Sombrero Struts JSF OpenXava Turbine SwingWeb VRaptor Cocoon Calyxo WebOnSwing Wicket Maverick Tapestry http://www.flickr.com/photos/nwardez/3089933582/in/photostream/
  52. Java Web Development JSPWidget OpenXava Turbine JSF JEE Struts Sombrero SwingWeb 1999 VRaptor Cocoon Calyxo Wicket WebOnSwing Tapestry Maverick http://www.itexto.net/devkico/?p=224
  53. Java Web Development Hibernate JEE Gerenciar 1999 Complexidade Spring Aqui jás Java para http://www.itexto.net/devkico/?p=224 Web
  54. Convenções Full Stack Scaffolding Extensibilidade http://www.itexto.net/devkico/?p=224
  55. Migrar tudo para Rails?
  56. Experiência Flexibilidade
  57. GRAILS http://grails.org Groovy é a linguagem base Convenções!! Ambiente Completo (“Full Stack”) Extensibilidade
  58. Full Stack Grails Groovy Java Enterprise Edition (JEE) Spring Hibernate SiteMesh The Java The Java Language Development Kit (JDK) The Java Virtual Machine
  59. Show me some code!! http://www.flickr.com/photos/outime/4250568447
  60. grails create-app library grails create-domain-class library.Book grails create-controller library.Book grails generate-all library.Book grails run-app
  61. Forma & Conteúdo
  62. Configuração 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 Domínio Active Record pattern GROM Groovy Relational Object Mapping Dynamic Finders Validations Hibernate Criterias
  64. Request Handling Response / rendering Controllers “Pense em Servlets, só que melhores!” Negociação de Conteúdo Data Binding Interceptors
  65. Parecido com JSPs e ASP HTML + GSP tags + Taglibs Views Layouts & Templates Embedded Groovy Code MAS NÃO FAÇA!
  66. Fácil e simples! Similar ao Routes do Rails URL Mapping Validations URL Encoding
  67. Transacionais por padrão Guargam Regras de Negócio Service Layer Diferenciados por Escopo Dependency Injection
  68. Testing http://www.flickr.com/photos/busyprinting/4671731838
  69. Plugins
  70. IDEs http://www.flickr.com/photos/22280677@N07/2504310138/
  71. Comunidade http://www.flickr.com/photos/badwsky/48435218/
  72. Comunidade http://groovy.codehaus.org http://grails.org http://grailsbrasil.com/ http://github.com/grails/grails-core Grails: um guia rápido 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.org http://grails.org/Testimonials
  75. Obrigado! twitter.com/victorhg www.lambda3.com.br Use it! Share it! Remix it!

×