groovy - departamento de informática e estatísticafrank/ine5612/seminario2010.1/groovy.pdf ·...
TRANSCRIPT
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/VantagensSuporte 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ç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:
Extraído de groovy.codehaus.org (21 de junho 2010)
Python Groovy
repr(x) x.inspect(), x.dump()
x.y if x else None x?.y
Diferenças entre Groovy e Python
Extraído de groovy.codehaus.org (21 de junho 2010)
Python Groovy
not x !x x.empty
len(x) x.size()
Diferenças entre Groovy e Python
Extraído de groovy.codehaus.org (21 de junho 2010)
Python Groovy
m = 'strip'; getattr(' ! ', m)() m = 'trim'; ' ! '."$m"()
args = ('a', 2); 'abcabc'.find(*args) args = ['a', 2]; 'abcabc'.indexOf(*args)
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/2006Framework para aplicações WEB Alta Produtividade Usa Hibernate, SpringGORM - Grails Object Relational MappingScaffolding
Referências BibliográficasCapí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.