Groovy stack
-
Upload
leonardo-silva -
Category
Software
-
view
1.726 -
download
0
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!