Title: Groovy
1Groovy
- Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas
Just Meller
2Tópicos
- 1) Introdução
- 2) Histórico
- 5) Características da Linguagem
- 6) Groovy Beans
- 6) Groovy vs Java
- 7) Frameworks (Grails, Griffon, Gaelyk)
- 8) Exemplo de aplicação em Grails
3Introduçã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.
4Histó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
5Características da Linguagem
- Def (Tipagem dinamica)
- Closures
- Methods Signature
- Collections
- Operators, Categories e Mixins
6Def
- 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.
7Exemplo 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 ClassCastExceptiondef name "Joao"print
ln name.toUpperCase() - // nao precisa de castObject name Joao"
- Object name "Maria"System.out.println(((String)
name).toUpperCase()) - // precisa de cast
8Closures
- 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)
9Exemplo Closures
- //Closure com variavel implícitadef closure1
print it closure1("olá") //ola - //Closure com argumentodef closure2 a, b -gt
- print ab
- closure2(5, 7) //12
??????????????????????????????????????????????????
??????????????????????????????????????????????????
??????????????????????????????????????????????????
??????????????????????????????????????????????????
??????????????????????????????????????????????????
??????????????????????????????????????????????????
??????????????????????????????????????????????????
?????????
10Exemplo Closures
- //Closure como parametro de métododef list 'a'
,'b','c','d' def newList def closure3
it.toUpperCase() - list.collect(newList, closure3)//Equivalente
alist.collect(newList)
it.toUpperCase() println newList //"A",
"B", "C", "D"????????????????
??????????????????????????????????????????????????
??????????????????????????????????????????????????
??????????????????????????????????????????????????
??????????????????????????????????????????????????
??????????????????????????????????????????????????
??????????????????????????????????????????????????
??????????????????????????????????????????????????
????????????????????
11Method 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
12Exemplo Method Signature
- class 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"?
13Collections
- 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
14Exemplo Collections
- def list 5, 6, 7, 8def map "nome""Mateus"
, "idade"19def range 0..10list.sort it
//5, 6, 7, 8 - map.find key, value -gt
- key "nome" value "Mateus"
- //nomeMateus
- list.findAll value -gt value gt 6 //7, 8
- range.each println it //conta ate 10
15Operators, Categories e Mixins
- 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)
16Exemplo Operators, Categories e Mixins
- interface Estudante def estudar()
- class Aluno implements Estudante
String nome Integer idade
def estudar() println "estudando.." Aluno
aluno1 new Aluno(nome "Mateus", idade 19)Alu
no aluno2 new Aluno(nome "Lucas", idade 20)Al
uno aluno3 null
17Exemplo Operators
- //Operador .?println aluno3.nome //throws
NullPointerExceptionprintln aluno3?.nome //ok//
Operador .def alunos aluno1, aluno2println
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 Estudante
- estudante.estudar()
18Exemplo Categories e Mixins
- _at_Category(Aluno) class AlunoDorminhoco
def dormir() println "zzzzz" _at_Mixin(Aluno
Dorminhoco)class Aluno implements Estudante
... - aluno1.dormir() //zzzzz
19Groovy 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
20Exemplo Groovy Beans
- class Customer Integer id
String name void setName(String name)
this.name "Senhor "name
Customer customer new Customer()customer
.id 1234 //setcustomer.name ?"Ma
nolo" //setprintln customer.id
//get 1234println customer.name
//get Senhor Manolo
21Groovy 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)
22Caracteristicas do Groovy inexistente no 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-seomitir 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 deadição e manipulação nas
propriedades de eventos listeners.
23Frameworks (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/
24Exemplo aplicação Grails
- "Como fazer um Twitter em 5 minutos"
25- I can honestly say if someone had shown me
the Programming Scala book by Martin Odersky, Lex
Spoon Bill Venners back in 2003 Id probably
have never created Groovy. James Strachan.
26Referências
- http//groovy.codehaus.org/
- http//groovyconsole.appspot.com/