Groovy stack

Post on 20-Mar-2017

1.723 views 0 download

Transcript of Groovy stack

Groovy StackGroovy, Gradle, Spock e Geb

whoami• Leonardo, dev na Pismo• Lorena, Ilha de Lost• Professor na FATEA• Java, Spring, Groovy, Clojure e AWS ♥

Conteúdo• Groovy• Gradle• Spock• Geb

Groovy, what?• Linguagem que roda na JVM• Gera bytecodes (.class)• Linguagem Dinâmica

• Definição de tipos em runtime• Possivel criação de atributos e metodos em

runtime

Groovy, why?• Baixa curva de aprendizado para Java

devs• Aprimora as libs padrão do Java, ao invés

de substituí-las• Syntax Sugar• Closures ♥ • Ótimo para criação de DSLs

Baixa curva de aprendizado?

public void salvar(Usuario usuario){ usuarioService.salvar(usuario); }

void salvar(Usuario usuario){ usuarioService.salvar(usuario)}

Aprimora o Java?

Syntax Sugar• Listas• Mapas• Groovy Truth• Gstring• Criação de objetos

Closure?• Funciona como uma função, mas não se engane:

é um objeto• É um objeto que implementa a interface Callable, por isso possui um método call()

• Porém o groovy adiciona syntax sugar que nos permite executar uma closure sem chamar explicitamente o método call...

Closure?• Por ser um objeto, pode ser passado como

parametro e retornado como resultado• Closure nos auxilia a aplicar um pouco de

programação funcional em nosso codigo através de:• Curry• Memoization• Trampoline

Closure?• Curry: funções que retornam funções

Closure?• Memoization: cache em funções

Closure?• Trampoline: evite StackOverflow

Closure?• Trampoline: evite StackOverflow

Closure?No geral, é Lambda no Java?

Closure?No geral, é Lambda no Java? Marromeno

Closure?E o que mais?• this: referência do objeto/classe onde foi criado

• owner: idêntico ao this, porém caso seja criado dentro de outra closure, o owner se torna a closure externa

• delegate: idêntico ao owner, mas pode ser alterado

Closure

Talk is cheapShow me the code!

Gradle, what?• Gerenciador de build:

• Dependências• Testes• Deploy• Metricas• Etc, etc, etc

Gradle, why?• Maven

• Build, muitos plugins, lifecycle bem definido, gerencia dependencias

• Burocrático, dificil de personalizar (criar tasks)• Gradle

• Build, muitos plugins, lifecycle bem definido, gerencia dependencias, fácil de personalizar (criar tasks), groovy ao invés de xml

• Gradle Wrapper

Gradle

Talk is cheapShow me the code!

Gradle• Se molda ao seu processo e não o contrário• Exemplo de uso:

• Criação de instâncias na núvem (ec2)• Upload de artefatos gerados onde quiser• Livre pra integrar com o que quiser!!!

Spock, what?• Biblioteca para testes• BDD• Baseado em Specifications• Suporte nativo:

• Mocks• Chamadas assíncronas

Spock

Talk is cheapShow me the code!

Geb, what?• http://www.gebish.org/• Selenium• JQuery-like• Ótimo suporte para PageObjects• Groovy

Geb

Talk is cheapShow me the code!

Groovy Stack

Dúvidas??

leosilvadev@gmail.com