SlideShare une entreprise Scribd logo
1  sur  37
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 !!!

Contenu connexe

Tendances

Perl Moderno, dia3
Perl Moderno, dia3Perl Moderno, dia3
Perl Moderno, dia3garux
 
Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...
Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...
Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...Paulo Henrique Lerbach Rodrigues
 
Threads 04 Variáveis atômicas
Threads 04 Variáveis atômicasThreads 04 Variáveis atômicas
Threads 04 Variáveis atômicasHelder da Rocha
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com javaMaurício Linhares
 
Threads 06: Coleções concorrentes
Threads 06: Coleções concorrentesThreads 06: Coleções concorrentes
Threads 06: Coleções concorrentesHelder da Rocha
 
Apresentação de Ruby com Watir webdriver
Apresentação de Ruby com Watir webdriverApresentação de Ruby com Watir webdriver
Apresentação de Ruby com Watir webdriverRafael Lima
 
Threads 07: Sincronizadores
Threads 07: SincronizadoresThreads 07: Sincronizadores
Threads 07: SincronizadoresHelder da Rocha
 
Theano - Alto Desempenho em Machine Learning
Theano - Alto Desempenho em Machine LearningTheano - Alto Desempenho em Machine Learning
Theano - Alto Desempenho em Machine LearningFelipe Martins
 
Programação Concorrente - Aula 05
Programação Concorrente - Aula 05Programação Concorrente - Aula 05
Programação Concorrente - Aula 05thomasdacosta
 
Estrutura de Dados - Aula 08
Estrutura de Dados - Aula 08Estrutura de Dados - Aula 08
Estrutura de Dados - Aula 08thomasdacosta
 
Spock Framework 2
Spock Framework 2Spock Framework 2
Spock Framework 2Ismael
 
Técnicas para preparação e desenvolvimento de sites em django
Técnicas para preparação e desenvolvimento de sites em djangoTécnicas para preparação e desenvolvimento de sites em django
Técnicas para preparação e desenvolvimento de sites em djangoMario Chaves
 
Threads 10: CompletableFuture
Threads 10: CompletableFutureThreads 10: CompletableFuture
Threads 10: CompletableFutureHelder da Rocha
 
Perl Moderno, dia1
Perl Moderno, dia1Perl Moderno, dia1
Perl Moderno, dia1garux
 
Threads 08: Executores e Futures
Threads 08: Executores e FuturesThreads 08: Executores e Futures
Threads 08: Executores e FuturesHelder da Rocha
 
Escopos e Modificadores - Preparatório Certificação - OCAJP7 - Aula 1 - B
Escopos e Modificadores - Preparatório Certificação - OCAJP7 - Aula 1 - BEscopos e Modificadores - Preparatório Certificação - OCAJP7 - Aula 1 - B
Escopos e Modificadores - Preparatório Certificação - OCAJP7 - Aula 1 - BPaulo Henrique Lerbach Rodrigues
 

Tendances (20)

Perl Moderno, dia3
Perl Moderno, dia3Perl Moderno, dia3
Perl Moderno, dia3
 
Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...
Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...
Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...
 
Threads 04 Variáveis atômicas
Threads 04 Variáveis atômicasThreads 04 Variáveis atômicas
Threads 04 Variáveis atômicas
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com java
 
Threads 06: Coleções concorrentes
Threads 06: Coleções concorrentesThreads 06: Coleções concorrentes
Threads 06: Coleções concorrentes
 
Threads e sockets java
Threads e sockets javaThreads e sockets java
Threads e sockets java
 
Apresentação de Ruby com Watir webdriver
Apresentação de Ruby com Watir webdriverApresentação de Ruby com Watir webdriver
Apresentação de Ruby com Watir webdriver
 
Threads 07: Sincronizadores
Threads 07: SincronizadoresThreads 07: Sincronizadores
Threads 07: Sincronizadores
 
Theano - Alto Desempenho em Machine Learning
Theano - Alto Desempenho em Machine LearningTheano - Alto Desempenho em Machine Learning
Theano - Alto Desempenho em Machine Learning
 
Programação Concorrente - Aula 05
Programação Concorrente - Aula 05Programação Concorrente - Aula 05
Programação Concorrente - Aula 05
 
Estrutura de Dados - Aula 08
Estrutura de Dados - Aula 08Estrutura de Dados - Aula 08
Estrutura de Dados - Aula 08
 
Spock Framework 2
Spock Framework 2Spock Framework 2
Spock Framework 2
 
Curso de Java: Threads
Curso de Java: ThreadsCurso de Java: Threads
Curso de Java: Threads
 
Técnicas para preparação e desenvolvimento de sites em django
Técnicas para preparação e desenvolvimento de sites em djangoTécnicas para preparação e desenvolvimento de sites em django
Técnicas para preparação e desenvolvimento de sites em django
 
Threads 10: CompletableFuture
Threads 10: CompletableFutureThreads 10: CompletableFuture
Threads 10: CompletableFuture
 
Perl Moderno, dia1
Perl Moderno, dia1Perl Moderno, dia1
Perl Moderno, dia1
 
Threads 08: Executores e Futures
Threads 08: Executores e FuturesThreads 08: Executores e Futures
Threads 08: Executores e Futures
 
Escopos e Modificadores - Preparatório Certificação - OCAJP7 - Aula 1 - B
Escopos e Modificadores - Preparatório Certificação - OCAJP7 - Aula 1 - BEscopos e Modificadores - Preparatório Certificação - OCAJP7 - Aula 1 - B
Escopos e Modificadores - Preparatório Certificação - OCAJP7 - Aula 1 - B
 
Javascript
JavascriptJavascript
Javascript
 
Threads 09: Paralelismo
Threads 09: ParalelismoThreads 09: Paralelismo
Threads 09: Paralelismo
 

En vedette

A computacao e_voce_caminhos_para_seguir
A computacao e_voce_caminhos_para_seguirA computacao e_voce_caminhos_para_seguir
A computacao e_voce_caminhos_para_seguirUFPA
 
Possibilidades com python
Possibilidades com pythonPossibilidades com python
Possibilidades com pythonUFPA
 
Beljug2010
Beljug2010Beljug2010
Beljug2010UFPA
 
Flex + Grails @ Flexmania2010
Flex + Grails @ Flexmania2010Flex + Grails @ Flexmania2010
Flex + Grails @ Flexmania2010João Zaratine
 
Arquitetura de software e Frameworks
Arquitetura de software e FrameworksArquitetura de software e Frameworks
Arquitetura de software e FrameworksSergio Crespo
 
Grails from scratch
Grails from scratchGrails from scratch
Grails from scratchUFPA
 
Spring roo produtividade no java
Spring roo produtividade no javaSpring roo produtividade no java
Spring roo produtividade no javaPedro Cavalero
 

En vedette (8)

A computacao e_voce_caminhos_para_seguir
A computacao e_voce_caminhos_para_seguirA computacao e_voce_caminhos_para_seguir
A computacao e_voce_caminhos_para_seguir
 
Possibilidades com python
Possibilidades com pythonPossibilidades com python
Possibilidades com python
 
Beljug2010
Beljug2010Beljug2010
Beljug2010
 
Flex + Grails @ Flexmania2010
Flex + Grails @ Flexmania2010Flex + Grails @ Flexmania2010
Flex + Grails @ Flexmania2010
 
Arquitetura de software e Frameworks
Arquitetura de software e FrameworksArquitetura de software e Frameworks
Arquitetura de software e Frameworks
 
Grails from scratch
Grails from scratchGrails from scratch
Grails from scratch
 
Grails
GrailsGrails
Grails
 
Spring roo produtividade no java
Spring roo produtividade no javaSpring roo produtividade no java
Spring roo produtividade no java
 

Similaire à Introdução ao Framework Grails

Kotlin: conhecendo features de uma linguagem moderna
Kotlin: conhecendo features de uma linguagem modernaKotlin: conhecendo features de uma linguagem moderna
Kotlin: conhecendo features de uma linguagem modernaFabrício Rissetto
 
Indo além na jvm com grails - UFOP
Indo além na jvm com grails - UFOPIndo além na jvm com grails - UFOP
Indo além na jvm com grails - UFOPFelipe Zampa
 
Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Elaine Cecília Gatto
 
Groovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessGroovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessRafael Farias Silva
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javJulio Viegas
 
04 modelagem classes
04 modelagem classes04 modelagem classes
04 modelagem classesjosejunior89
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.pptEmerson Cardoso
 
Grails parte 1 - introdução
Grails   parte 1 - introduçãoGrails   parte 1 - introdução
Grails parte 1 - introduçãoJosino Rodrigues
 
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...Manuel Menezes de Sequeira
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Alamo Saravali
 
Perl From Vi, Part I
Perl From Vi, Part IPerl From Vi, Part I
Perl From Vi, Part ILuciano Rocha
 

Similaire à Introdução ao Framework Grails (20)

Kotlin: conhecendo features de uma linguagem moderna
Kotlin: conhecendo features de uma linguagem modernaKotlin: conhecendo features de uma linguagem moderna
Kotlin: conhecendo features de uma linguagem moderna
 
Floggy-IIBoot-2008-09-25
Floggy-IIBoot-2008-09-25Floggy-IIBoot-2008-09-25
Floggy-IIBoot-2008-09-25
 
Indo além na jvm com grails - UFOP
Indo além na jvm com grails - UFOPIndo além na jvm com grails - UFOP
Indo além na jvm com grails - UFOP
 
Java hidden features
Java hidden featuresJava hidden features
Java hidden features
 
Minicurso groovy grails
Minicurso groovy grailsMinicurso groovy grails
Minicurso groovy grails
 
Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3
 
Groovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessGroovy para javeiros - Migração Painless
Groovy para javeiros - Migração Painless
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
 
Threads
ThreadsThreads
Threads
 
Java hidden features
Java hidden featuresJava hidden features
Java hidden features
 
04 modelagem classes
04 modelagem classes04 modelagem classes
04 modelagem classes
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.ppt
 
Javascript
Javascript Javascript
Javascript
 
Grails parte 1 - introdução
Grails   parte 1 - introduçãoGrails   parte 1 - introdução
Grails parte 1 - introdução
 
String e IO
String e IOString e IO
String e IO
 
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
 
Lambda Expressions
Lambda ExpressionsLambda Expressions
Lambda Expressions
 
POO - 09 - Entradas e Saídas em Java
POO - 09 - Entradas e Saídas em JavaPOO - 09 - Entradas e Saídas em Java
POO - 09 - Entradas e Saídas em Java
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1
 
Perl From Vi, Part I
Perl From Vi, Part IPerl From Vi, Part I
Perl From Vi, Part I
 

Plus de Bruno Catão

Plus de Bruno Catão (20)

Introdução às Redes Neurais - Parte 2/2
Introdução às Redes Neurais - Parte 2/2Introdução às Redes Neurais - Parte 2/2
Introdução às Redes Neurais - Parte 2/2
 
Introdução às Redes Neurais - Parte 1/2
Introdução às Redes Neurais - Parte 1/2Introdução às Redes Neurais - Parte 1/2
Introdução às Redes Neurais - Parte 1/2
 
React JS - Parte 2
React JS - Parte 2React JS - Parte 2
React JS - Parte 2
 
React JS - Parte 1
React JS - Parte 1React JS - Parte 1
React JS - Parte 1
 
Node JS - Parte 4
Node JS - Parte 4Node JS - Parte 4
Node JS - Parte 4
 
Node JS - Parte 3
Node JS - Parte 3Node JS - Parte 3
Node JS - Parte 3
 
Node JS - Parte 2
Node JS - Parte 2Node JS - Parte 2
Node JS - Parte 2
 
Node JS - Parte 1
Node JS - Parte 1Node JS - Parte 1
Node JS - Parte 1
 
Ionic 2/3 + Firebase
Ionic 2/3 + FirebaseIonic 2/3 + Firebase
Ionic 2/3 + Firebase
 
Retina e Retinose Pigmentar
Retina e Retinose PigmentarRetina e Retinose Pigmentar
Retina e Retinose Pigmentar
 
Mean Stack
Mean StackMean Stack
Mean Stack
 
Angular js
Angular jsAngular js
Angular js
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN Stack
 
Web Offline
Web OfflineWeb Offline
Web Offline
 
Python 08
Python 08Python 08
Python 08
 
Python 07
Python 07Python 07
Python 07
 
Python 06
Python 06Python 06
Python 06
 
Python 05
Python 05Python 05
Python 05
 
Python 04
Python 04Python 04
Python 04
 
Python 03
Python 03Python 03
Python 03
 

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

Notes de l'éditeur

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n