A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller."— Transcrição da apresentação:

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

2 Tó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

3 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.

4 Histó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]”

5 Características da Linguagem Def (Tipagem dinamica) Closures Methods Signature Collections Operators, Categories e Mixins

6 Def 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”.

7 Exemplo: 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

8 Closures 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)

9 Exemplo: Closures //Closure com variavel implícita def closure1 = { print it } closure1("olá") //ola //Closure com argumento def closure2 = { a, b -> print a+b } closure2(5, 7) //12 ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​​​​​​

10 Exemplo: Closures //Closure como parametro de método def 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"]​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

11 Method 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

12 Exemplo: 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" }​

13 Collections 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{}

14 Exemplo: 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

15 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

16 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

17 //Operador.? println aluno3.nome //throws NullPointerException println aluno3?.nome //ok //Operador.* def alunos = [aluno1, aluno2] println alunos*.idade.sum() / alunos.size() //19.5 //Operador in println aluno1 in Estudante //true println aluno1 in Object //true //Operador as def estudante = { estudar: println "estudante nao aluno” } as Estudante estudante.estudar() Exemplo: Operators

18 Exemplo: Categories e Mixins @Category(Aluno) class AlunoDorminhoco { def dormir() { println "zzzzz" } } @Mixin(AlunoDorminhoco) class Aluno implements Estudante { [...] } aluno1.dormir() //zzzzz

19 Groovy 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

20 Exemplo: Groovy Beans class Customer { Integer id String name void setName(String name) { this.name = "Senhor "+name } } Customer customer = new Customer() customer.id = 1234 //set customer.name = ​"Manolo" //set println customer.id //get = 1234 println customer.name //get = Senhor Manolo

21 Groovy 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)

22 Caracteristicas 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-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.

23 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/

24 Exemplo 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 I ’ d probably have never created Groovy. ” –James Strachan.Programming ScalaJames Strachan

26 Referências http://groovy.codehaus.org/ http://groovyconsole.appspot.com/


Carregar ppt "Groovy Mateus Maso, Vanoir Zacaron, Vicente Coral, Lucas Just Meller."

Apresentações semelhantes


Anúncios Google