0
Groovy
    &
  Grails
Victor Hugo Germano
      #lambda3   http://www.flickr.com/photos/montreal1976/4502659151
“Quando você programa em Groovy,
de várias formas você está escrevendo
       um tipo especial de Java.”

                ...
Integração transparente
             com Java
Suporta Tipagem
    Estática          bytcode

     Groovy
 Sintaxe Similar ...
file.groovy            file.java




 bytecode             bytecode



   The Java Virtual Machine
http://www.flickr.com/photos/oskay/472097903/
Uma classe em Java
 public class HelloWorld {
   private String name;

     public String getName() {
       return name;
...
A mesma classe
  em Groovy
 class HelloWorld {
   String name
   def message() {
      "Hello World of $name"
   }
 }
 def...
http://www.flickr.com/photos/noideas/2323222802/




Conceitos Básicos
Conceitos Básicos

Se você já programa em Java,
você já programa em Groovy!



                    http://www.flickr.com/ph...
Conceitos Básicos
         class Pessoa {
           String nome
           int idade
         }
       void setIdade(idad...
Conceitos Básicos
   def today = new Date()
   def tomorrow = today + 1


 assert today.before(tomorrow)
 assert tomorrow....
Operator Overloading
     a+b        a.plus(b)
     a-b       a.minus(b)
     a/b      a.multiply(b)
     a%b      a.modul...
Operator Overloading
 class Pedido {
    def total
    def plus(Pedido pedido) {
       def result = this.total + pedido.t...
Special Operatos
 Elvis operator
 def displayName = user.name ? user.name : “No one”
 def displayName = user.name ?: “No o...
Groovy Strings

          http://www.flickr.com/photos/elianarei/3904613032/
Groovy Strings
   public String displayString() {
       return “<u>” + title + “</u> by ” +
               authorName + “...
Groovy Strings
String displayMultiLineString() {
  “““<u>$title</ul>
     by $authorName,
   ($numberOfPages pages)”””;
}
Collections

         http://www.flickr.com/photos/wisekris/183438282/
Collections
def frutas = [“Banana” , “Pera”, “Maçã” ]


def countries = [ br: “Brazil”,
          us: “United States”,
   ...
Collections
for (c in countries) {
    println c
}


  countries.each {
     println it
  }
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...
Collections
private List books;

   public List<Book> findByISBN(String isbnCode) {
      Book result = null;
      if(boo...
Collections
  List books;
	 Book findByISBN(String isbnCode){
	 	 books?.find({it?.isbn == isbnCode});
	 }

  List books;
...
Groovy Truth
Groovy Truth
  def a = true
  def a = false
  assert a
  assert !b
Groovy Truth
def numbers = []
assert numbers // false

def numbers = [1, 2, 3]
assert numbers // true
 Coleções Vazias!
Groovy Truth
assert ‘Verdadeiro’ // true

assert ‘’ // false

          Strings!
Groovy Truth
assert null // false
assert 0 // false

assert (new Object()) // true
assert 1 // true
Objetos e Números!
Closures

      http://www.flickr.com/photos/brizzlebornandbred/4262145162/
Closures
{ Bloco de Código
       ou
 Pointeiro para
  um Método }
Closures
def refParaClosure ={
  parametros ->
  //Código..
}

refParaClosure(p1, p2...)
Let’s play!
     http://www.flickr.com/photos/rogerss1/3232663848
Arquivos
Em
Java!!!!
import java.io.*;
class FileRead 
{
   public static void main(String args[])
  {
      try{
    // Open the file that is ...
def file = new File("textfile.txt")
 file.eachLine { line ->
   println line
  }




                      moonbug.org
Arquivos
def file = new File("textfile.txt")
file << ‘Escrevendo no arquivo’

    def dir = new File("c:")
    dir.eachFil...
Duck Typing

        http://www.flickr.com/photos/catdonmit/2326033244/
Duck Typing
void cuidar(Pato pato) {
     pato.quack()
     pato.andar()
     pato.comer(new Comida(tipo: “peixe”))
 }
Duck Typing
 void fakePato = [
   andar: { },
   quack: { },
   comer: { Comida c -> }
        ]

cuidar(fakePato as Pato)
Metaprogramação
M.O.P.
Meta Object Protocol

Criando código
  gerador de código
Metaprogramação
           MetaClass
          ExpandoClass
    getProperty / setProperty
invokeMethod / invokeStaticMetho...
Metaprogramação
 "Florianópolis".totalDeLetras()

String.metaclass {
  totalDeLetras = { delegate.size() }
}
Builders
import groovy.xml.MarkupBuilder

def mkp = new MarkupBuilder()
mkp.html {
  head {
    title "Minicurso G&G"
  }
...
http://www.flickr.com/photos/ttdesign/343167590




AST Transformation
AST Transformation
  Metaprogramação em tempo de compilação
public class T {
    public static final T instance = new T();...
AST Transformation
class Pessoa {          class Endereco {
    String nome             String rua
    @Delegate          ...
http://www.flickr.com/photos/jerica_chingcuangco/3659719599




Can you feel it?
GRAILS
Outro Framework Web?!
           JSPWidget
 Sombrero              Struts
  JSF   OpenXava      Turbine
      SwingWeb
VRap...
Java Web Development
              JSPWidget
              OpenXava
                Turbine
                  JSF
JEE Stru...
Java Web Development
                                       Hibernate


    JEE                 Gerenciar
      1999
     ...
Convenções
      Full Stack
      Scaffolding

Extensibilidade

          http://www.itexto.net/devkico/?p=224
Migrar tudo para
     Rails?
Experiência




Flexibilidade
GRAILS
       http://grails.org

   Groovy é a linguagem base
          Convenções!!

Ambiente Completo (“Full Stack”)

  ...
Full Stack
                  Grails




                                              Groovy
Java Enterprise
 Edition (JEE...
Show me
some code!!

        http://www.flickr.com/photos/outime/4250568447
grails create-app library
   grails create-domain-class library.Book


    grails create-controller library.Book



      ...
Forma & Conteúdo
Configuração
environments {
    development {
        dataSource {
            dbCreate = "create-drop"
            url = "...
Modelagem de Domínio
  Active Record pattern

        GROM
Groovy Relational Object Mapping
      Dynamic Finders
        ...
Request Handling
 Response / rendering


  Controllers
          “Pense em Servlets, só que melhores!”

Negociação de Cont...
Parecido com JSPs e ASP
HTML + GSP tags + Taglibs

       Views
   Layouts & Templates
Embedded Groovy Code
  MAS NÃO FAÇA!
Fácil e simples!
Similar ao Routes do Rails

 URL Mapping
      Validations
     URL Encoding
Transacionais por padrão
Guargam Regras de Negócio

  Service Layer
 Diferenciados por Escopo
   Dependency Injection
Testing
          http://www.flickr.com/photos/busyprinting/4671731838
Plugins
IDEs
  http://www.flickr.com/photos/22280677@N07/2504310138/
Comunidade
       http://www.flickr.com/photos/badwsky/48435218/
Comunidade
   http://groovy.codehaus.org
          http://grails.org
      http://grailsbrasil.com/
http://github.com/grai...
Tá, e daí?




Quem usa de Verdade?
Quem usa de Verdade?
http://www.wired.com/            http://www.sky.com/




  http://iiea.com                       http...
Obrigado!

twitter.com/victorhg
www.lambda3.com.br

              Use it! Share it!
                Remix it!
Minicurso groovy grails
Upcoming SlideShare
Loading in...5
×

Minicurso groovy grails

9,279

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
7 Likes
Statistics
Notes
No Downloads
Views
Total Views
9,279
On Slideshare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
347
Comments
3
Likes
7
Embeds 0
No embeds

No notes for slide

Transcript of "Minicurso groovy grails"

  1. 1. Groovy & Grails Victor Hugo Germano #lambda3 http://www.flickr.com/photos/montreal1976/4502659151
  2. 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. 3. Integração transparente com Java Suporta Tipagem Estática bytcode Groovy Sintaxe Similar Linguagem Dinâmica para JVM Meta Object Protocol
  4. 4. file.groovy file.java bytecode bytecode The Java Virtual Machine
  5. 5. http://www.flickr.com/photos/oskay/472097903/
  6. 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. 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. 8. http://www.flickr.com/photos/noideas/2323222802/ Conceitos Básicos
  9. 9. Conceitos Básicos Se você já programa em Java, você já programa em Groovy! http://www.flickr.com/photos/jeyp/4149695639
  10. 10. Conceitos Básicos class Pessoa { String nome int idade } void setIdade(idade) { this.idade = idade - 4 } new Pessoa ( nome: “Zé”, idade: 7)
  11. 11. Conceitos Básicos def today = new Date() def tomorrow = today + 1 assert today.before(tomorrow) assert tomorrow.after(today)
  12. 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. 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. 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. 15. Groovy Strings http://www.flickr.com/photos/elianarei/3904613032/
  16. 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. 17. Groovy Strings String displayMultiLineString() { “““<u>$title</ul> by $authorName, ($numberOfPages pages)”””; }
  18. 18. Collections http://www.flickr.com/photos/wisekris/183438282/
  19. 19. Collections def frutas = [“Banana” , “Pera”, “Maçã” ] def countries = [ br: “Brazil”, us: “United States”, ie: “Ireland” ] println countries.br
  20. 20. Collections for (c in countries) { println c } countries.each { println it }
  21. 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. 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. 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. 24. Groovy Truth
  25. 25. Groovy Truth def a = true def a = false assert a assert !b
  26. 26. Groovy Truth def numbers = [] assert numbers // false def numbers = [1, 2, 3] assert numbers // true Coleções Vazias!
  27. 27. Groovy Truth assert ‘Verdadeiro’ // true assert ‘’ // false Strings!
  28. 28. Groovy Truth assert null // false assert 0 // false assert (new Object()) // true assert 1 // true Objetos e Números!
  29. 29. Closures http://www.flickr.com/photos/brizzlebornandbred/4262145162/
  30. 30. Closures { Bloco de Código ou Pointeiro para um Método }
  31. 31. Closures def refParaClosure ={ parametros -> //Código.. } refParaClosure(p1, p2...)
  32. 32. Let’s play! http://www.flickr.com/photos/rogerss1/3232663848
  33. 33. Arquivos
  34. 34. Em Java!!!!
  35. 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. 36. def file = new File("textfile.txt") file.eachLine { line -> println line } moonbug.org
  37. 37. Arquivos def file = new File("textfile.txt") file << ‘Escrevendo no arquivo’ def dir = new File("c:") dir.eachFile { println it }
  38. 38. Duck Typing http://www.flickr.com/photos/catdonmit/2326033244/
  39. 39. Duck Typing void cuidar(Pato pato) { pato.quack() pato.andar() pato.comer(new Comida(tipo: “peixe”)) }
  40. 40. Duck Typing void fakePato = [ andar: { }, quack: { }, comer: { Comida c -> } ] cuidar(fakePato as Pato)
  41. 41. Metaprogramação
  42. 42. M.O.P. Meta Object Protocol Criando código gerador de código
  43. 43. Metaprogramação MetaClass ExpandoClass getProperty / setProperty invokeMethod / invokeStaticMethod methodMissing
  44. 44. Metaprogramação "Florianópolis".totalDeLetras() String.metaclass { totalDeLetras = { delegate.size() } }
  45. 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. 46. http://www.flickr.com/photos/ttdesign/343167590 AST Transformation
  47. 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. 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. 49. http://www.flickr.com/photos/jerica_chingcuangco/3659719599 Can you feel it?
  50. 50. GRAILS
  51. 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. 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. 53. Java Web Development Hibernate JEE Gerenciar 1999 Complexidade Spring Aqui jás Java para http://www.itexto.net/devkico/?p=224 Web
  54. 54. Convenções Full Stack Scaffolding Extensibilidade http://www.itexto.net/devkico/?p=224
  55. 55. Migrar tudo para Rails?
  56. 56. Experiência Flexibilidade
  57. 57. GRAILS http://grails.org Groovy é a linguagem base Convenções!! Ambiente Completo (“Full Stack”) Extensibilidade
  58. 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. 59. Show me some code!! http://www.flickr.com/photos/outime/4250568447
  60. 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. 61. Forma & Conteúdo
  62. 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. 63. Modelagem de Domínio Active Record pattern GROM Groovy Relational Object Mapping Dynamic Finders Validations Hibernate Criterias
  64. 64. Request Handling Response / rendering Controllers “Pense em Servlets, só que melhores!” Negociação de Conteúdo Data Binding Interceptors
  65. 65. Parecido com JSPs e ASP HTML + GSP tags + Taglibs Views Layouts & Templates Embedded Groovy Code MAS NÃO FAÇA!
  66. 66. Fácil e simples! Similar ao Routes do Rails URL Mapping Validations URL Encoding
  67. 67. Transacionais por padrão Guargam Regras de Negócio Service Layer Diferenciados por Escopo Dependency Injection
  68. 68. Testing http://www.flickr.com/photos/busyprinting/4671731838
  69. 69. Plugins
  70. 70. IDEs http://www.flickr.com/photos/22280677@N07/2504310138/
  71. 71. Comunidade http://www.flickr.com/photos/badwsky/48435218/
  72. 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. 73. Tá, e daí? Quem usa de Verdade?
  74. 74. Quem usa de Verdade? http://www.wired.com/ http://www.sky.com/ http://iiea.com http://cmrf.org http://grails.org/Testimonials
  75. 75. Obrigado! twitter.com/victorhg www.lambda3.com.br Use it! Share it! Remix it!
  1. A particular slide catching your eye?

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

×