groovy - departamento de informática e estatísticafrank/ine5612/seminario2010.1/groovy.pdf ·...

21
GROOVY Diogo Eládio Igor

Upload: vuongkhue

Post on 07-Nov-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

GROOVYDiogoElá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/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ç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:

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.