Groovy

Propaganda
GROOVY
Diogo
Eládio
Igor
Como surgiu?
Primeiro sinal de vida foi dado por James Strachan
em seu blog em agosto de 2003.
Várias versões foram lançadas entre 2004 e 2006,
porém somente depois do processo de
padronização JCP foi adotado a versão “1.0”,
lançada em janeiro de 2007 (beta).
Versão 1.1 Final foi lançada em dezembro do
mesmo ano, porém logo foi rebatizada de 1.5
devida as grandes modificações.
A versão atual é a 1.7.
O que é?
Groovy é uma linguagem ágil e dinâmica
que roda sobre a JVM.
Adiciona ferramentas fortes e modernas
sobre o Java, inspiradas em linguagens
como Python, Ruby e Smalltalk.
Pode ser usada interpretada como um script
ou compilada pelo groovyc.
Assim como Java, Groovy também é OO,
porém também pode-se programar de forma
procedural com a mesma.
Recursos/Vantagens
Suporte nativo a Closures: como se
fosse uma função mais livre de variáveis.
Nela pode-se passar variáveis que
podem não estar definidas na assinatura.
Exemplo: def soma = {
x , y -> println x + y
}
soma 3, 5
DRY (Don’t Repeat Yourself): evita repetição
desnecessária de código.
Exemplo: você faz uma classe, adiciona uma
variável e não precisa fazer getter e setter para a
mesma, entre vários outros usos.
Exemplo2: public class Pessoa {
def nome, idade;
String toString() {
"Nome: ${nome} idade: ${idade}”
}
}
p = new Pessoa(nome: “Joao”, idade: 20)
println p
Duck Typing: diminui a quantidade de código que
precisa digitar, faz o código mais legível e flexível.
GStrings: uso do operador $ para resolver uma
variável ou expressão dentro de uma String.
Suporte nativo a Mapas (tipo que que permite
mapear dados, ligando um valor a outro) e Listas.
Exemplo:
def mapa = [1: “Joao”, 2: “Maria”]
mapa += [3: “Jose”]
mapa.each{
println “Chave: ${it.key} - valor: ${it.value}”
}
Operadores: adicionam agilidade para o
código, podem ser usados inclusive com
classes.
Exemplo: class Pessoa{
def nome, filho
def rightShift(f){
filho = f
}
}
def p1 = new Pessoa(nome: “Joao”)
def p2 = new Pessoa(nome: “Jose”)
p1 >> p2
Operações null-safe: evita Null Pointer
Exception automaticamente. Basta
apenas colocar o ? na frente.
Entre outras funcionalidades.
Mais referência para estudo: http:
//groovy.codehaus.org/
Diferenças entre Groovy e
outras linguagens
Diferença entre Groovy e Java
Como o Groovy é uma linguagem compatível com Java, por
esse motivo é muito comum que as pessoas pensem as duas
linguagens são idênticas, contudo existem algumas diferenças
significativas.
No Groovy, inúmeras classes e pacotes são importados
automaticamente (default) tais quais:
java.io.*
java.lang.*
java.math.BigDecimal
java.math.BigInteger
java.net.*
java.util.*
groovy.lang.*
groovy.util.*
Algumas situações que um desenvolvedor Java pode ser
induzido ao erro ao iniciar o desenvolvimento em Groovy:
● “= =” significa “igual” para todos os tipos. Diferentemente do
Java que para os tipos primários representa igualdade e para
os Objetos identidade. Ou seja, não há a necessidade de usar
equals(), pode-se utilizar diretamente o comando “= =”
● “in” é uma palavra chave, portanto não pode-se usá-la para
nomear variáveis.
● Para declarar um array, em vez de escrever int a [] = {1, 2,
3} é preciso escrever:
int a[] = [1, 2, 3]
● Forma de simplificação do comando de looping “for”;
enquanto no java você precisa declarar o for da seguinte
forma:
for(int i=0; i<length-1; i++) { }
no Groovy, pode se fazer também dessa forma, mas pode usar
de uma simplificação sendo esta:
for(i in 0..<length-1) { }
ou até mesmo uma forma ainda mais simplificada:
length.times { }
Algumas coisas que é interessante
saber:
● A finalização das linhas com ponto e vírgula é opcional.
● O uso da palavra-chave “return” também é opcional.
● Pode-se usar a palavra-chave “this” dentro de métodos
estáticos (aqueles que referenciam classes)
● Métodos e classes são públicas (public) em seu estado
default.
● a cláusula “throws” não é interpretada pelo compilador
groovy, uma vez que não existe diferenciação entre exceções
verificadas e não verificadas.
Novidades no 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-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.
Diferenças entre Groovy e Python
Geral:
Python
Groovy
repr(x)
x.inspect(), x.dump()
x.y if x else None
x?.y
Extraído de groovy.codehaus.org (21 de junho 2010)
Diferenças entre Groovy e Python
Python
Groovy
not x
!x x.empty
len(x)
x.size()
Extraído de groovy.codehaus.org (21 de junho 2010)
Diferenças entre Groovy e Python
Python
Groovy
m = 'strip'; getattr(' ! ', m)()
m = 'trim'; ' ! '."$m"()
args = ('a', 2); 'abcabc'.find(*args)
args = ['a', 2]; 'abcabc'.indexOf
(*args)
Extraído de groovy.codehaus.org (21 de junho 2010)
Diferenças entre Groovy e Ruby
Existe uma grande similaridade entre o Groovy e Ruby,
ambos utilizam de programação abstrata, em que tudo é
um objeto. O Ruby usa o Ruby Library, o Groovy utiliza o
Java Library, com algumas adições necessárias.
As diferenças são poucas, contudo deve-se ter um
cuidado especial, dos os desenvolvedores Ruby que
estão migrando para Groovy, principalmente ao que
tange a sintaxe dos closures.
Grails
É um framework com intuito de otimizar a produtividade dos
aplicativos WEB na linguagem Groovy.
Utiliza o paradígma de programação "programação por
convenção" o qual, minimiza o contato do desenvolvedor com
a parte sintática e detalhes profundos na programação.
Dessa forma o desenvolvedor tem disponível mais tempo com
a execução da lógica e assim aumenta a produtividade
Foi renomeado de Groovy on Rails para Grails após pedidos
formais do desenvolvedor do projeto Ruby on Rails.
Grails
Versão 0.1 em março/2006
Framework para aplicações WEB
Alta Produtividade
Usa Hibernate, Spring
GORM - Grails Object Relational Mapping
Scaffolding
Referências Bibliográficas
Capítulo "From Java to Groovy" do Livro Groovy and Grails
Recipes, Bashar Abdul-Jawad, 2009.
Capítulo "Getting Started with Groovy" do Livro Groovy and
Grails Recipes, Bashar Abdul-Jawad, 2009.
Capítulo "Groovy Data types and Control Structures" do Livro
Groovy and Grails Recipes, Bashar Abdul-Jawad, 2009.
Capítulo "Rapid Web Development Using Groovy and Grails"
do Livro Spring Persistence A Running Start,
Paul Tepper Fisher and Soloman Duskis, 2009
http://groovy.codehaus.org acessado em Junho de 2010.
Download