SlideShare uma empresa Scribd logo
GRAILS
Bruno Gama Catão
Pai em tempo integral
Professor da Facisa
  Sistemas de Informação
  Jogos Digitais
Coordenador do LTI
Tento levar alguns projetos open source:
  github.com/brunogamacatao
grails.org
O que é ?

• Tecnologia para construção RÁPIDA e
  FÁCIL de aplicações para a Internet
  (web)
GRAILS = GROOVY + RAILS
GROOVY ?
  Groovy




   Java
Código Java
public class AloMundo {
	 private String nome;
	
	 public String getNome() {
	 	 return nome;
	 }
	
	 public void setNome(String nome) {
	 	 this.nome = nome;
	 }
	
	 public String saudacao() {
	 	 return "Oi " + nome;
	 }
	
	 public static void main(String[] args) {
	 	 AloMundo alo = new AloMundo();
	 	 alo.setNome("Fulano");
	 	 System.out.println(alo.saudacao());
	 }
}
Código Groovy
public class AloMundo {
	 private String nome;
	
	 public String getNome() {
	 	 return nome;
	 }
	
	 public void setNome(String nome) {
	 	 this.nome = nome;
	 }
	
	 public String saudacao() {
	 	 return "Oi " + nome;
	 }
	
	 public static void main(String[] args) {
	 	 AloMundo alo = new AloMundo();
	 	 alo.setNome("Fulano");
	 	 System.out.println(alo.saudacao());
	 }
}
É a mesma coisa ?!
 ... então, qual a
vantagem disso ?
Código Groovy
                 class AloMundo {
                 	 private String nome
                                                 Pra quê ;
                 	
                 	 String getNome() {
                                                           ?
                 	 	 return nome
                 	 }
                 	
                 	 void setNome(String nome) {
                 	 	 this.nome = nome

 To das as       	 }
                 	
 classes e       	 String saudacao() {
            o
mé todos sã      	 	 return "Oi " + nome
             é   	 }
pú blicos at     	

 que  prove o    	 static void main(String[] args) {

      trário !
                 	 	 AloMundo alo = new AloMundo()
  con            	 	 alo.setNome("Fulano")
                 	 	 System.out.println(alo.saudacao())
                 	 }
                 }
Código Groovy

                      class AloMundo {
                      	 String nome
                      	
                      	 String saudacao() {
                      	 	 return "Oi " + nome
                      	 }
                      	
                      	 static void main(String[] args) {
                      	 	 AloMundo alo = new AloMundo()
                      	 	 alo.setNome("Fulano")

Atribut os já tem     	 	 System.out.println(alo.saudacao())

     et e set
                      	 }
    g                 }
   au tomático
                  )
 (prop  riedades
Código Groovy
                                                     Ao invés
                                                System.o        de
                     class AloMundo {                    ut.println
                     	 def nome                   apenas p           use
                     	                                      rintln ;)
                     	 def saudacao() {
                     	 	 return "Oi " + nome
                     	 }
                     	
                     	 static main(args) {
                     	 	 def alo = new AloMundo()
                     	 	 alo.setNome("Fulano")

 Lin  guagens        	 	 println(alo.saudacao())

      r temente
                     	 }
   fo                }

 tipad    as estão
fora de     moda !
Código Groovy
                                              Versão fi
                     class AloMundo {
                                                      nal !
                     	 def nome
                     	
         e forma
Olha qu
                     	 def saudacao() {

         construir
                     	 	 return "Oi ${nome}"
legal de             	 }

     Strings !       	
                     	 static main(args) {
                     	 	 def alo = new AloMundo()
                     	 	 alo.nome = "Fulano"
                     	 	 println alo.saudacao()      Não precisa
                     	 }
                     }                              chamar get/set
• Resultado:

 • 21 linhas Java contra 13 linhas Groovy

 • Limpamos o lixo do código !
Java - Lendo um Arquivo
import   java.io.BufferedReader;
import   java.io.FileNotFoundException;
import   java.io.FileReader;
import   java.io.IOException;



public class LeArquivo {
	 public static void main(String[] args) {
	 	 try {
	 	 	 BufferedReader arquivo = new BufferedReader(new FileReader("/etc/passwd"));
	 	 	 String line = null;
	 	 	 while ((line = arquivo.readLine()) != null) {
	 	 	 	 System.out.println(line);
	 	 	 }
	 	 	 arquivo.close();
	 	 } catch (FileNotFoundException ex) {
	 	 	 ex.printStackTrace();
	 	 } catch (IOException ex) {
	 	 	 ex.printStackTrace();
	 	 }
	 }
}
Groovy - Lendo um Arquivo
                                                    Tá quase
                                                             bom ...

             class LeArquivo {
             	 static main(args) {
             	 	 new File("/etc/passwd").eachLine({line ->
             	 	 	 println(line)
             	 	 })
             	 }
             }



           p assar um
  Podemos        closure,
         código,
bloco de             !
            râmetro
    como pa
Groovy - Lendo um Arquivo
                        e la só tem            Versão fi
               asse, se
Pra quê uma cl                                         nal !
                  o main ?
       u m métod



new File("/etc/passwd").eachLine {line -> println line}


                                      Pense bem ... ne
                                                        m todos os
                                      parêntesis são n
                                                       ecessários !
Entendendo Melhor Groovy
Variáveis

def nomeDaVariavel = valorDaVariavel


Ex:
def idade = 28
def nome = “Bruno”
Strings 1/2

def nome = 'José da Silva'
def cidade = "Campina Grande"
def texto = '''Oi,
como vai você ?
Tudo bem ?'''
def expr = /Contra-barras são bem vindas !/
Strings 2/2
     • GStrings (Groovy Strings) podem ser
       construídos de duas formas:
       • Concatenação: +
       • Expressões: ${expressão}

def primeiroNome = 'José'
def ultimoNome   = 'Silva'
def nomeCompleto = primeiroNome + ' ' + ultimoNome

//Expressões devem vir em Strings com aspas duplas !
def nomeCompleto = "${primeiroNome} ${ultimoNome}"
Listas
def listaVazia = []
def frutas = ['Banana', 'Maçã']
frutas << 'Abacate'


print listaVazia.size() // 0
print frutas[2] // Maçã


//O trecho abaixo dá no mesmo ...
def nomes = new ArrayList()
nomes.add('Bruno')
//Porém não é muito Groovy
Maps

def mapaVazio = [:]
def preco = [cocaCola: 2.00, coxinha: 2.50]


print preco[pipoca] // 0.50


preco[guarana: 1.50]
Métodos
def saudacao(nome) {
    print "Oi ${nome}, como vai você ?"
}


def soma(a, b) {
    a + b // Não precisa do return
}
Closures 1/3

• É um novo tipo de dado;
• Representa um trecho de código;
• Pode ser passado como argumento em
  métodos e armazenado em variáveis.
Closures 2/3
def saudacao = {print "Oi, como vai?"}
saudacao() // "Oi como vai?"


// Parâmetro implícito: it
def saudacao2 = {
    print "Oi ${it} como vai?"
}
saudacao("Bruno") // "Oi Bruno como vai?"


def soma = { a, b ->
    a + b // Lembrem-se, não precisa do return
}
soma(2, 3) // 5
Closures 3/3
def executaOperacao(a, b, operacao) {
    operacao(a, b)
}


def multiplicacao = {a, b -> a * b}
def subtracao = {a, b => a - b}


executaOperacao(5, 2, multiplicacao) // 10
executaOperacao(5, 2, subtracao) // 3
Novos Operadores
• Spread: *.
• Elvis: ?:
• Safe navigation: ?.
• Contém: in
• Conversão: as
• Identidade: is
E o Grails ?
TODO o Código de uma Aplicação
            Web
                                               gera as
       Contato.groovy            Est e código
                                               anco de
       class Contato {           tab elas do b
                                               sultas, e
       	 String nome              da  dos, con
                                      página s em 13
       	 String telefone
                                         idiomas !
       }

      ContatoController.groovy

       class ContatoController {
           def scaffold = Contato
       }
Isso é bom ?
Vantagens

• Mais fácil de manter
• Mais fácil de testar
• Resultados rápidos
• Aumenta a diversão
E a infra-estrutura ?
Tudo é Java
• Você só está digitando menos !
• Tudo vai para um arquivo WAR
• Base sólida:
 • JPA (Hibernate)
 • Spring
 • Sitemesh ...
ALGUNS CONCEITOS
• Convenção ao invés de codificação

• Scaffolding (andaime)

• Templates

• Boas ferramentas
MÃO NA MASSA !!!

Mais conteúdo relacionado

PDF
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
Tchelinux
 
PPT
Floggy-GUJavaSC-2008-09-20
Thiago Leão Moreira
 
PDF
Aprendendo ruby
Maurício Linhares
 
PDF
Perl Moderno, dia5
garux
 
PPT
Spock Framework
Ismael
 
PDF
Perl Moderno, dia2
garux
 
PDF
Curso java 06 - mais construtores, interfaces e polimorfismo
Maurício Linhares
 
PDF
Perl Moderno, dia4
garux
 
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
Tchelinux
 
Floggy-GUJavaSC-2008-09-20
Thiago Leão Moreira
 
Aprendendo ruby
Maurício Linhares
 
Perl Moderno, dia5
garux
 
Spock Framework
Ismael
 
Perl Moderno, dia2
garux
 
Curso java 06 - mais construtores, interfaces e polimorfismo
Maurício Linhares
 
Perl Moderno, dia4
garux
 

Mais procurados (20)

PDF
Perl Moderno, dia3
garux
 
PDF
Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...
Paulo Henrique Lerbach Rodrigues
 
PDF
Threads 04 Variáveis atômicas
Helder da Rocha
 
PPTX
Curso java 01 - molhando os pés com java
Maurício Linhares
 
PDF
Threads 06: Coleções concorrentes
Helder da Rocha
 
PDF
Threads e sockets java
Adriano Negrão
 
PDF
Apresentação de Ruby com Watir webdriver
Rafael Lima
 
PDF
Threads 07: Sincronizadores
Helder da Rocha
 
PPTX
Theano - Alto Desempenho em Machine Learning
Felipe Martins
 
PPTX
Programação Concorrente - Aula 05
thomasdacosta
 
PPTX
Estrutura de Dados - Aula 08
thomasdacosta
 
PPT
Spock Framework 2
Ismael
 
PDF
Curso de Java: Threads
Helder da Rocha
 
PPT
Técnicas para preparação e desenvolvimento de sites em django
Mario Chaves
 
PDF
Threads 10: CompletableFuture
Helder da Rocha
 
PDF
Perl Moderno, dia1
garux
 
PDF
Threads 08: Executores e Futures
Helder da Rocha
 
PDF
Escopos e Modificadores - Preparatório Certificação - OCAJP7 - Aula 1 - B
Paulo Henrique Lerbach Rodrigues
 
PPTX
Javascript
Fernando Simeone
 
PDF
Threads 09: Paralelismo
Helder da Rocha
 
Perl Moderno, dia3
garux
 
Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...
Paulo Henrique Lerbach Rodrigues
 
Threads 04 Variáveis atômicas
Helder da Rocha
 
Curso java 01 - molhando os pés com java
Maurício Linhares
 
Threads 06: Coleções concorrentes
Helder da Rocha
 
Threads e sockets java
Adriano Negrão
 
Apresentação de Ruby com Watir webdriver
Rafael Lima
 
Threads 07: Sincronizadores
Helder da Rocha
 
Theano - Alto Desempenho em Machine Learning
Felipe Martins
 
Programação Concorrente - Aula 05
thomasdacosta
 
Estrutura de Dados - Aula 08
thomasdacosta
 
Spock Framework 2
Ismael
 
Curso de Java: Threads
Helder da Rocha
 
Técnicas para preparação e desenvolvimento de sites em django
Mario Chaves
 
Threads 10: CompletableFuture
Helder da Rocha
 
Perl Moderno, dia1
garux
 
Threads 08: Executores e Futures
Helder da Rocha
 
Escopos e Modificadores - Preparatório Certificação - OCAJP7 - Aula 1 - B
Paulo Henrique Lerbach Rodrigues
 
Javascript
Fernando Simeone
 
Threads 09: Paralelismo
Helder da Rocha
 
Anúncio

Destaque (8)

PDF
A computacao e_voce_caminhos_para_seguir
UFPA
 
PDF
Possibilidades com python
UFPA
 
PPTX
Beljug2010
UFPA
 
PDF
Flex + Grails @ Flexmania2010
João Zaratine
 
PDF
Arquitetura de software e Frameworks
Sergio Crespo
 
PDF
Grails from scratch
UFPA
 
PPTX
Grails
Alex Guido
 
ODP
Spring roo produtividade no java
Pedro Cavalero
 
A computacao e_voce_caminhos_para_seguir
UFPA
 
Possibilidades com python
UFPA
 
Beljug2010
UFPA
 
Flex + Grails @ Flexmania2010
João Zaratine
 
Arquitetura de software e Frameworks
Sergio Crespo
 
Grails from scratch
UFPA
 
Grails
Alex Guido
 
Spring roo produtividade no java
Pedro Cavalero
 
Anúncio

Semelhante a Introdução ao Framework Grails (20)

PDF
Curso de Groovy
Bruno Nascimento
 
PDF
Minicurso groovy grails
Victor Hugo Germano
 
ODP
Groovy para javeiros - Migração Painless
Rafael Farias Silva
 
PDF
Groovy na plataforma Java
João Lourenço
 
PDF
String e IO
Elenilson Vieira
 
PDF
Ecosistema spring a_plataforma_enterprise_jav
Julio Viegas
 
PPTX
Grails - Destaques (para quem já sabe Java)
Douglas Mendes
 
PPT
(Portuguese) Java EE Poliglota
Phil Calçado
 
PDF
Groovy & grails
Arian Pasquali
 
PDF
Groovy & Grails
InformantTalks
 
ODP
Groovy
Lucas Aquiles
 
PDF
Grails parte 1 - introdução
Josino Rodrigues
 
PDF
Java 05
samuelthiago
 
PDF
A linguagem java
Portal_do_Estudante_Java
 
ODP
Groovy
Lucas Aquiles
 
PPT
Indo além na jvm com grails - UFOP
Felipe Zampa
 
PPTX
Kotlin: conhecendo features de uma linguagem moderna
Fabrício Rissetto
 
PPT
55 New Things in Java 7 - Brazil
Stephen Chin
 
PDF
caelum-java-objetos-fj11.pdf
ssuserbc6cf7
 
PDF
Oficina groovy grails - infoway
Lucas Aquiles
 
Curso de Groovy
Bruno Nascimento
 
Minicurso groovy grails
Victor Hugo Germano
 
Groovy para javeiros - Migração Painless
Rafael Farias Silva
 
Groovy na plataforma Java
João Lourenço
 
String e IO
Elenilson Vieira
 
Ecosistema spring a_plataforma_enterprise_jav
Julio Viegas
 
Grails - Destaques (para quem já sabe Java)
Douglas Mendes
 
(Portuguese) Java EE Poliglota
Phil Calçado
 
Groovy & grails
Arian Pasquali
 
Groovy & Grails
InformantTalks
 
Grails parte 1 - introdução
Josino Rodrigues
 
Java 05
samuelthiago
 
A linguagem java
Portal_do_Estudante_Java
 
Indo além na jvm com grails - UFOP
Felipe Zampa
 
Kotlin: conhecendo features de uma linguagem moderna
Fabrício Rissetto
 
55 New Things in Java 7 - Brazil
Stephen Chin
 
caelum-java-objetos-fj11.pdf
ssuserbc6cf7
 
Oficina groovy grails - infoway
Lucas Aquiles
 

Mais de Bruno Catão (20)

PPTX
Introdução às Redes Neurais - Parte 2/2
Bruno Catão
 
PPTX
Introdução às Redes Neurais - Parte 1/2
Bruno Catão
 
PPTX
React JS - Parte 2
Bruno Catão
 
PPTX
React JS - Parte 1
Bruno Catão
 
PPTX
Node JS - Parte 4
Bruno Catão
 
PPTX
Node JS - Parte 3
Bruno Catão
 
PPTX
Node JS - Parte 2
Bruno Catão
 
PPTX
Node JS - Parte 1
Bruno Catão
 
PDF
Ionic 2/3 + Firebase
Bruno Catão
 
PPTX
Retina e Retinose Pigmentar
Bruno Catão
 
PDF
Mean Stack
Bruno Catão
 
PDF
Angular js
Bruno Catão
 
PDF
Introdução à MEAN Stack
Bruno Catão
 
PDF
Web Offline
Bruno Catão
 
KEY
Python 08
Bruno Catão
 
KEY
Python 07
Bruno Catão
 
KEY
Python 06
Bruno Catão
 
KEY
Python 05
Bruno Catão
 
KEY
Python 04
Bruno Catão
 
KEY
Python 03
Bruno Catão
 
Introdução às Redes Neurais - Parte 2/2
Bruno Catão
 
Introdução às Redes Neurais - Parte 1/2
Bruno Catão
 
React JS - Parte 2
Bruno Catão
 
React JS - Parte 1
Bruno Catão
 
Node JS - Parte 4
Bruno Catão
 
Node JS - Parte 3
Bruno Catão
 
Node JS - Parte 2
Bruno Catão
 
Node JS - Parte 1
Bruno Catão
 
Ionic 2/3 + Firebase
Bruno Catão
 
Retina e Retinose Pigmentar
Bruno Catão
 
Mean Stack
Bruno Catão
 
Angular js
Bruno Catão
 
Introdução à MEAN Stack
Bruno Catão
 
Web Offline
Bruno Catão
 
Python 08
Bruno Catão
 
Python 07
Bruno Catão
 
Python 06
Bruno Catão
 
Python 05
Bruno Catão
 
Python 04
Bruno Catão
 
Python 03
Bruno Catão
 

Último (17)

PPTX
Curso de Java 6 - (Números, Data e Hora).pptx
Anderson Maciel
 
PPTX
21 - Lógica de Programação com Portugol.pptx
Anderson Maciel
 
PPTX
Curso de Java 4 - (Orientação a Objetos).pptx
Anderson Maciel
 
PDF
Explorando o Futuro do Corpo: Implantes Neurais e o Biohacking dos Sentidos
cooperliora
 
PPTX
Curso de Java 1 - (Introdução Geral).pptx
Anderson Maciel
 
PPTX
Curso de Java 5 - (Strings) Tipo de Dados.pptx
Anderson Maciel
 
PPTX
Curso de Java 2 - (PrimeiroPrograma, Variáveis, Tipos e Operadores.pptx
Anderson Maciel
 
PPTX
Desenvolvimento-de-Produtos-Inovadores.pptx
ssuser1d7565
 
PPT
Sistemas de Informação em Saúde Aplicada.ppt
fabriciolabgeo91411
 
PPTX
aplicativopenseira.pptx Aplicativo que organiza Pensamentos - Peça Publicitária
StelaNorie1
 
PPTX
Curso de Java 7 - (ArrayList, Collections,(Set, List, Queue, Map)).pptx
Anderson Maciel
 
PPTX
SISTEMA DE INFORMAÇÃO EM SAÚDE_UEPA.pptx
fabriciolabgeo91411
 
PPTX
Curso de Java 8 - (Tratamento de Exceções, (try-catch-finally)).pptx
Anderson Maciel
 
PPTX
22 - Lógica de Programação com Portugol.pptx
Anderson Maciel
 
PPTX
Computacao-e-Tecnologias-Digitais-Por-Que-Aprender.pptx
RobertaOliveiradaFon1
 
PPTX
Curso de Java 3 - (Estruturas de Controle, Decisão, Loop, Procedimento).pptx
Anderson Maciel
 
PDF
Certificado em Redes Neurais Artificiais em Python
CaioSilva506151
 
Curso de Java 6 - (Números, Data e Hora).pptx
Anderson Maciel
 
21 - Lógica de Programação com Portugol.pptx
Anderson Maciel
 
Curso de Java 4 - (Orientação a Objetos).pptx
Anderson Maciel
 
Explorando o Futuro do Corpo: Implantes Neurais e o Biohacking dos Sentidos
cooperliora
 
Curso de Java 1 - (Introdução Geral).pptx
Anderson Maciel
 
Curso de Java 5 - (Strings) Tipo de Dados.pptx
Anderson Maciel
 
Curso de Java 2 - (PrimeiroPrograma, Variáveis, Tipos e Operadores.pptx
Anderson Maciel
 
Desenvolvimento-de-Produtos-Inovadores.pptx
ssuser1d7565
 
Sistemas de Informação em Saúde Aplicada.ppt
fabriciolabgeo91411
 
aplicativopenseira.pptx Aplicativo que organiza Pensamentos - Peça Publicitária
StelaNorie1
 
Curso de Java 7 - (ArrayList, Collections,(Set, List, Queue, Map)).pptx
Anderson Maciel
 
SISTEMA DE INFORMAÇÃO EM SAÚDE_UEPA.pptx
fabriciolabgeo91411
 
Curso de Java 8 - (Tratamento de Exceções, (try-catch-finally)).pptx
Anderson Maciel
 
22 - Lógica de Programação com Portugol.pptx
Anderson Maciel
 
Computacao-e-Tecnologias-Digitais-Por-Que-Aprender.pptx
RobertaOliveiradaFon1
 
Curso de Java 3 - (Estruturas de Controle, Decisão, Loop, Procedimento).pptx
Anderson Maciel
 
Certificado em Redes Neurais Artificiais em Python
CaioSilva506151
 

Introdução ao Framework Grails

  • 2. Bruno Gama Catão Pai em tempo integral Professor da Facisa Sistemas de Informação Jogos Digitais Coordenador do LTI Tento levar alguns projetos open source: github.com/brunogamacatao
  • 4. O que é ? • Tecnologia para construção RÁPIDA e FÁCIL de aplicações para a Internet (web)
  • 5. GRAILS = GROOVY + RAILS
  • 6. GROOVY ? Groovy Java
  • 7. Código Java public class AloMundo { private String nome; public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String saudacao() { return "Oi " + nome; } public static void main(String[] args) { AloMundo alo = new AloMundo(); alo.setNome("Fulano"); System.out.println(alo.saudacao()); } }
  • 8. Código Groovy public class AloMundo { private String nome; public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String saudacao() { return "Oi " + nome; } public static void main(String[] args) { AloMundo alo = new AloMundo(); alo.setNome("Fulano"); System.out.println(alo.saudacao()); } }
  • 9. É a mesma coisa ?! ... então, qual a vantagem disso ?
  • 10. Código Groovy class AloMundo { private String nome Pra quê ; String getNome() { ? return nome } void setNome(String nome) { this.nome = nome To das as } classes e String saudacao() { o mé todos sã return "Oi " + nome é } pú blicos at que prove o static void main(String[] args) { trário ! AloMundo alo = new AloMundo() con alo.setNome("Fulano") System.out.println(alo.saudacao()) } }
  • 11. Código Groovy class AloMundo { String nome String saudacao() { return "Oi " + nome } static void main(String[] args) { AloMundo alo = new AloMundo() alo.setNome("Fulano") Atribut os já tem System.out.println(alo.saudacao()) et e set } g } au tomático ) (prop riedades
  • 12. Código Groovy Ao invés System.o de class AloMundo { ut.println def nome apenas p use rintln ;) def saudacao() { return "Oi " + nome } static main(args) { def alo = new AloMundo() alo.setNome("Fulano") Lin guagens println(alo.saudacao()) r temente } fo } tipad as estão fora de moda !
  • 13. Código Groovy Versão fi class AloMundo { nal ! def nome e forma Olha qu def saudacao() { construir return "Oi ${nome}" legal de } Strings ! static main(args) { def alo = new AloMundo() alo.nome = "Fulano" println alo.saudacao() Não precisa } } chamar get/set
  • 14. • Resultado: • 21 linhas Java contra 13 linhas Groovy • Limpamos o lixo do código !
  • 15. Java - Lendo um Arquivo import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class LeArquivo { public static void main(String[] args) { try { BufferedReader arquivo = new BufferedReader(new FileReader("/etc/passwd")); String line = null; while ((line = arquivo.readLine()) != null) { System.out.println(line); } arquivo.close(); } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } }
  • 16. Groovy - Lendo um Arquivo Tá quase bom ... class LeArquivo { static main(args) { new File("/etc/passwd").eachLine({line -> println(line) }) } } p assar um Podemos closure, código, bloco de ! râmetro como pa
  • 17. Groovy - Lendo um Arquivo e la só tem Versão fi asse, se Pra quê uma cl nal ! o main ? u m métod new File("/etc/passwd").eachLine {line -> println line} Pense bem ... ne m todos os parêntesis são n ecessários !
  • 19. Variáveis def nomeDaVariavel = valorDaVariavel Ex: def idade = 28 def nome = “Bruno”
  • 20. Strings 1/2 def nome = 'José da Silva' def cidade = "Campina Grande" def texto = '''Oi, como vai você ? Tudo bem ?''' def expr = /Contra-barras são bem vindas !/
  • 21. Strings 2/2 • GStrings (Groovy Strings) podem ser construídos de duas formas: • Concatenação: + • Expressões: ${expressão} def primeiroNome = 'José' def ultimoNome = 'Silva' def nomeCompleto = primeiroNome + ' ' + ultimoNome //Expressões devem vir em Strings com aspas duplas ! def nomeCompleto = "${primeiroNome} ${ultimoNome}"
  • 22. Listas def listaVazia = [] def frutas = ['Banana', 'Maçã'] frutas << 'Abacate' print listaVazia.size() // 0 print frutas[2] // Maçã //O trecho abaixo dá no mesmo ... def nomes = new ArrayList() nomes.add('Bruno') //Porém não é muito Groovy
  • 23. Maps def mapaVazio = [:] def preco = [cocaCola: 2.00, coxinha: 2.50] print preco[pipoca] // 0.50 preco[guarana: 1.50]
  • 24. Métodos def saudacao(nome) { print "Oi ${nome}, como vai você ?" } def soma(a, b) { a + b // Não precisa do return }
  • 25. Closures 1/3 • É um novo tipo de dado; • Representa um trecho de código; • Pode ser passado como argumento em métodos e armazenado em variáveis.
  • 26. Closures 2/3 def saudacao = {print "Oi, como vai?"} saudacao() // "Oi como vai?" // Parâmetro implícito: it def saudacao2 = { print "Oi ${it} como vai?" } saudacao("Bruno") // "Oi Bruno como vai?" def soma = { a, b -> a + b // Lembrem-se, não precisa do return } soma(2, 3) // 5
  • 27. Closures 3/3 def executaOperacao(a, b, operacao) { operacao(a, b) } def multiplicacao = {a, b -> a * b} def subtracao = {a, b => a - b} executaOperacao(5, 2, multiplicacao) // 10 executaOperacao(5, 2, subtracao) // 3
  • 28. Novos Operadores • Spread: *. • Elvis: ?: • Safe navigation: ?. • Contém: in • Conversão: as • Identidade: is
  • 30. TODO o Código de uma Aplicação Web gera as Contato.groovy Est e código anco de class Contato { tab elas do b sultas, e String nome da dos, con página s em 13 String telefone idiomas ! } ContatoController.groovy class ContatoController { def scaffold = Contato }
  • 32. Vantagens • Mais fácil de manter • Mais fácil de testar • Resultados rápidos • Aumenta a diversão
  • 34. Tudo é Java • Você só está digitando menos ! • Tudo vai para um arquivo WAR • Base sólida: • JPA (Hibernate) • Spring • Sitemesh ...
  • 36. • Convenção ao invés de codificação • Scaffolding (andaime) • Templates • Boas ferramentas

Notas do Editor