Groovy Stack
Groovy, 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 cheap
Show 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 cheap
Show 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 cheap
Show me the code!
Geb, what?
• http://www.gebish.org/
• Selenium
• JQuery-like
• Ótimo suporte para PageObjects
• Groovy
Geb
Talk is cheap
Show me the code!
Groovy Stack
Dúvidas??
leosilvadev@gmail.com

Groovy stack