26
Groovy Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

Embed Size (px)

Citation preview

Page 1: Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

GroovyGroovy

Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

Page 2: Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

TópicosTópicos

1) Introdução2) Histórico5) Características da Linguagem6) Groovy Beans6) Groovy vs Java7) Frameworks (Grails, Griffon, Gaelyk)8) Exemplo de aplicação em Grails

Page 3: Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

Introdução Introdução

• Groovy é uma linguagem ágil e dinâmica que roda sobre a JVM.

• Groovy possui características de Python, Ruby e Smalltalk.

• Groovy utiliza uma sintaxe similar à de Java, é compilada dinamicamente para bytecode Java, e integra-se com outros códigos e bibliotecas Java.

• Assim como Java, Groovy também é Orientada a Objetos,porém também pode-se programar de forma procedural com a mesma.

• Utiliza tipagem dinâmica, forte e duck.

Page 4: Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

HistóricoHistórico•  A primeira menção ao Groovy foi vista no blog de James

Strachan em Agosto de 2003; • Em 2 de janeiro de 2007 foi publicada a primeira versão

(1.0) do Groovy  •  Em dezembro de 2007 a versão 1.1 Final foi entregue e

imediatamente se constituiu como Groovy 1.5 devido ao grande avanço obtido.

   “Groovy é uma linguagem ágil e dinâmica para a plataforma

Java com muitas características inspiradas em linguagens como Python, Ruby e Smalltalk, disponibilizando-as para os desenvolvedores utlizando uma sintaxe similar à de Java [GROOVY, 2009]”

Page 5: Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

Características da LinguagemCaracterísticas da Linguagem

• Def (Tipagem dinamica)• Closures• Methods Signature• Collections• Operators, Categories e Mixins

Page 6: Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

DefDef

O que é tipagem dinâmica?

•Em Groovy também representada por “def”.•Usado para indicar que você não se importa ou não sabe o tipo de variável representado.•Groovy parser não acusa nenhum tipo de erro.•É possivel usar esta expressão tanto para variáveis locais, atributos de uma classe e retorno de método.•Reconhece void como um tipo de retorno vazio.

Regra importante: "def" não é uma representação de "Object”.

Page 7: Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

Exemplo: DefExemplo: Def

def dynamic = 1 dynamic = "Eu sou uma String guardada num tipo dinamico" int typed = 2 typed = "Eu sou uma String guardada num tipo int estático??" // throws ClassCastException

def name = "Joao"println name.toUpperCase() // nao precisa de castObject name = ”Joao";

Object name = "Maria"System.out.println(((String) name).toUpperCase()); // precisa de cast

Page 8: Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

ClosuresClosures

O que são Closures?

•"bloco de código" ou um ponteiro para método.•Pedaço de código definido e executado naquele ponto.•Possui algumas propriedades especiais:    - Variáveis implícitas "it",     - Passagem de argumentos    - Consegue usar variáveis livres (fora da closure)    - Parâmetro de método (mandar um “método” para um método)

Page 9: Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

Exemplo: ClosuresExemplo: Closures

//Closure com variavel implícitadef closure1 = { print it } closure1("olá") //ola

//Closure com argumentodef closure2 = { a, b ->     print a+b } closure2(5, 7) //12

Page 10: Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

Exemplo: ClosuresExemplo: Closures//Closure como parametro de métododef list = ['a','b','c','d'] def newList = []  def closure3 = { it.toUpperCase() } 

list.collect(newList, closure3)//Equivalente a:list.collect(newList) {       it.toUpperCase() } 

println newList //["A", "B", "C", "D"]

Page 11: Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

Method SignatureMethod Signature  

Como é invocado métodos? •Parêntesis "()" opcional

•Múltiplos parâmetros (em lista) •Parâmetros com mapeamento •Declaração de throws opcional •Suporta duck typing

Page 12: Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

Exemplo: Method SignatureExemplo: Method Signatureclass Duck {     String nome

    def quack(... args) {         println "I am a Duck called ${nome} ${args.length}"     } }  class Frog {        String nome

    def quack(... args) {         println "I am a Frog called ${nome} ${args.length}"     } }  

def quackers = [new Duck(nome: "Donald"), new Frog(nome: "Feioso")] 

for (q in quackers) {     q.quack 1, true, "Teste"}

Page 13: Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

CollectionsCollections

Como são representadas as coleções? 

•Suporte nativo de lists, maps e ranges. •List: [0, true, "Joao", ...] •Map: [”chave": "valor", ...]  •Range: -5..10  ou 'a'..'z'  •each{}, find{}, findAll{}, sort{}, collect{}

Page 14: Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

Exemplo: CollectionsExemplo: Collections

def list = [5, 6, 7, 8]def map = ["nome":"Mateus", "idade":19]def range = 0..10

list.sort { it } //[5, 6, 7, 8]

map.find { key, value ->     key == "nome" && value == "Mateus"} //nome=Mateus

list.findAll { value -> value > 6 } //[7, 8]

range.each { println it } //conta ate 10

Page 15: Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

Operadores especiais em Groovy:

•as e in•?.             (null-safe)•*.              (coleção)•?:             (condição)•=˜ e ==˜    (expressão regular)

Categories e Mixin em Groovy:•Agregam funções e atributos para uma classe•Melhor uso em classes JDK e third-party (nao mexer no código)

Operators, Categories e Mixins

Page 16: Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

interface Estudante {    def estudar()}

class Aluno implements Estudante {    String nome    Integer idade

    def estudar() { println "estudando.." }}

Aluno aluno1 = new Aluno(nome: "Mateus", idade: 19)Aluno aluno2 = new Aluno(nome: "Lucas", idade: 20)Aluno aluno3 = null

Exemplo: Operators, Categories e Mixins

Page 17: Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

//Operador .?println aluno3.nome //throws NullPointerExceptionprintln aluno3?.nome //ok

//Operador .*def alunos = [aluno1, aluno2]println alunos*.idade.sum() / alunos.size()  //19.5

//Operador inprintln aluno1 in Estudante //trueprintln aluno1 in Object    //true

//Operador asdef estudante = {

estudar: println "estudante nao aluno”} as Estudanteestudante.estudar()

Exemplo: Operators

Page 18: Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

Exemplo: Categories e MixinsExemplo: Categories e Mixins

@Category(Aluno) class AlunoDorminhoco {         def dormir() { println "zzzzz" }}

@Mixin(AlunoDorminhoco)class Aluno implements Estudante {    [...]}

aluno1.dormir() //zzzzz

Page 19: Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

Groovy Beans vs Java BeansGroovy Beans vs Java Beans

Qual é a vantagem de usar Groovy Beans?•JavaBeans com sintaxe simplificada•Construtor dinâmico (mapa com valores)•Gera getter e setter sem precisar declarar•Listeners e forma de closures

Page 20: Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

Exemplo: Groovy BeansExemplo: Groovy Beansclass Customer {         Integer id         String name     

    void setName(String name) {        this.name = "Senhor "+name    }}

Customer customer = new Customer()customer.id = 1234              //setcustomer.name =  "Manolo"       //set

println customer.id             //get = 1234println customer.name           //get = Senhor Manolo

Page 21: Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

Groovy vs JavaGroovy vs Java

• Condição: objeto null = false, objeto com referencia = true• Finalização com ponto e vírgula opcional• Return opcional• Switch com strings, ranges, etc.• Concatenar por ${} dentro de strings ””• SwingBuilter: simplifica a declaracao, o posicionamento e os

eventos dos elementos Swing (Java)

Page 22: Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

Caracteristicas do Groovy inexistente Caracteristicas do Groovy inexistente no javano java• Closure.• Sintaxe nativa para listas e mapas.• Interação polifórmica no switch-case.• Tipo dinâmico ou estático são aceitáveis, por isso pode-se

omitir o tipo na hora de declarar métodos ou variáveis.• Pode-se embutir expressões lógicas dentro de um String.• Sintaxe simplificada para escrever beans, com facilidade de

adição e manipulação nas propriedades de eventos listeners.

Page 23: Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

Frameworks (utilizaçao)Frameworks (utilizaçao)

• Grails: heavyweight web framework (MVC)    http://grails.org/• Griffon: desktop framework (MVC)    http://griffon.codehaus.org/• Gaelyk: lightweight web framework pra Google App Engine    http://gaelyk.appspot.com/

Page 24: Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

Exemplo aplicação GrailsExemplo aplicação Grails

"Como fazer um Twitter em 5 minutos"

Page 25: Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

“I can honestly say if someone had shown me the Programming Scala book by Martin Odersky, Lex Spoon & Bill Venners back in 2003 I’d probably have never created Groovy.” –James Strachan.

Page 26: Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller

ReferênciasReferências

http://groovy.codehaus.org/http://groovyconsole.appspot.com/