Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Introdução ao Framework Grails

1,424 views

Published on

Published in: Technology
  • Be the first to comment

Introdução ao Framework Grails

  1. 1. GRAILS
  2. 2. Bruno Gama CatãoPai em tempo integralProfessor da Facisa Sistemas de Informação Jogos DigitaisCoordenador do LTITento levar alguns projetos open source: github.com/brunogamacatao
  3. 3. grails.org
  4. 4. O que é ?• Tecnologia para construção RÁPIDA e FÁCIL de aplicações para a Internet (web)
  5. 5. GRAILS = GROOVY + RAILS
  6. 6. GROOVY ? Groovy Java
  7. 7. Código Javapublic 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. 8. Código Groovypublic 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. 9. É a mesma coisa ?! ... então, qual avantagem disso ?
  10. 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() { omé 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. 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. 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ãofora de moda !
  13. 13. Código Groovy Versão fi class AloMundo { nal ! def nome e formaOlha 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. 14. • Resultado: • 21 linhas Java contra 13 linhas Groovy • Limpamos o lixo do código !
  15. 15. Java - Lendo um Arquivoimport 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. 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. 17. Groovy - Lendo um Arquivo e la só tem Versão fi asse, sePra quê uma cl nal ! o main ? u m métodnew File("/etc/passwd").eachLine {line -> println line} Pense bem ... ne m todos os parêntesis são n ecessários !
  18. 18. Entendendo Melhor Groovy
  19. 19. Variáveisdef nomeDaVariavel = valorDaVariavelEx:def idade = 28def nome = “Bruno”
  20. 20. Strings 1/2def nome = José da Silvadef cidade = "Campina Grande"def texto = Oi,como vai você ?Tudo bem ?def expr = /Contra-barras são bem vindas !/
  21. 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 = Silvadef nomeCompleto = primeiroNome + + ultimoNome//Expressões devem vir em Strings com aspas duplas !def nomeCompleto = "${primeiroNome} ${ultimoNome}"
  22. 22. Listasdef listaVazia = []def frutas = [Banana, Maçã]frutas << Abacateprint listaVazia.size() // 0print frutas[2] // Maçã//O trecho abaixo dá no mesmo ...def nomes = new ArrayList()nomes.add(Bruno)//Porém não é muito Groovy
  23. 23. Mapsdef mapaVazio = [:]def preco = [cocaCola: 2.00, coxinha: 2.50]print preco[pipoca] // 0.50preco[guarana: 1.50]
  24. 24. Métodosdef saudacao(nome) { print "Oi ${nome}, como vai você ?"}def soma(a, b) { a + b // Não precisa do return}
  25. 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. 26. Closures 2/3def saudacao = {print "Oi, como vai?"}saudacao() // "Oi como vai?"// Parâmetro implícito: itdef 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. 27. Closures 3/3def executaOperacao(a, b, operacao) { operacao(a, b)}def multiplicacao = {a, b -> a * b}def subtracao = {a, b => a - b}executaOperacao(5, 2, multiplicacao) // 10executaOperacao(5, 2, subtracao) // 3
  28. 28. Novos Operadores• Spread: *.• Elvis: ?:• Safe navigation: ?.• Contém: in• Conversão: as• Identidade: is
  29. 29. E o Grails ?
  30. 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 }
  31. 31. Isso é bom ?
  32. 32. Vantagens• Mais fácil de manter• Mais fácil de testar• Resultados rápidos• Aumenta a diversão
  33. 33. E a infra-estrutura ?
  34. 34. Tudo é Java• Você só está digitando menos !• Tudo vai para um arquivo WAR• Base sólida: • JPA (Hibernate) • Spring • Sitemesh ...
  35. 35. ALGUNS CONCEITOS
  36. 36. • Convenção ao invés de codificação• Scaffolding (andaime)• Templates• Boas ferramentas
  37. 37. MÃO NA MASSA !!!

×