SlideShare uma empresa Scribd logo
1 de 34
Baixar para ler offline
Groovy na plataforma Java
Objetivos
● Plataforma Java
● Linguagem Groovy
● Recursos
● Aplicações
● Demostração de Código
● Projeto TOI
● Considerações
Plataforma Java
● Três pilares da plataforma:
– O Java Virtual Machine (JVM)
– O Java Development Kit (JDK)
– Muitas linguagens rodam na JVM
Plataforma Java
Por que outra linguagem?
Por que não Java?
● Existe problemas que Java resolve fácil, no
entanto existe muitos outros que Java dificulta
o trabalho.
● Para estas dificuldades devemos considerar
alternativas.
Alternativas para JVM
Histórico de Linguagens na JVM
Uma linguagem dinâmica/tipada
para plataforma Java
Origem
● Criada por James Strachan em 2013
● Desenvolvedores:
– Guillaume LaForge (Gerente de Projeto)
– Jochen Theodorou (Lider técnico)
– Paul King
– Cedric Champeau
● Patrocinador Principal
– Até março/2015 - Pivotal
– A partir de abril/2015 - Fundação Apache
Princípios
● “Java é ótimo para ferramentas, bibliotecas e
infraestrutura”
● “Groovy é ótimo para todo o resto”.
● “Use Java onde Java trabalha bem”.
● “Use Groovy onde você quer facilitar sua
vida”.
Características
● Muitas funcionalidades poderosas inspiradas
no Python, Ruby e Smaltalk
● Menos burocracia
● Dinâmica/Tipada
● Orientada a Objetos
● Linguagem de Script
● Executa na JVM
Recursos Interessantes
● Tipagem Dinâmica
● Clousures/lambda
● Collections
● Facilita os Testes
● Scripts
Tipagem Dinâmica
def valor = 200.0 //BigDecimal
assert valor.class == BigDecimal
valor = '200' //String
assert valor.class == String
def coisas = ['Ola']
coisas << 73
coisas << 56.0
coisas << true
assert coisas.class == ArrayList
assert coisas == ['Ola', 73, 56.0, true]
assert coisas*.class == [
String, Integer, BigDecimal,Boolean
]
assert coisas.collect{it.class} == [
String, Integer, BigDecimal,Boolean
]
Groovy Collections
//List
def list = [5, 6, 7, 8]
assert list.size == 4
assert list.size() == 4
assert list.class == ArrayList
//Range
assert 5..8 == [5,6,7,8]
assert 5..<8 == [5, 6, 7]
Groovy Collections
//each
def n=0
(1..10).each{ n += it }
assert n == 55
//find
assert [1, 2, 3].find{ it > 1 } == 2
assert [1, 2, 3].findAll{ it > 1 } == [2, 3]
Groovy Collections
//sort
def listAll= ['e','d','c','b','a']
listAll.sort(true)
assert listAll == ['a','b','c','d','e']
//reverse
listAl == ['a','b','c','d','e']
assert listAl.reverse() == ['e','d','c','b','a']
assert listAl == ['a','b','c','d','e']
Groovy Collections
//collect
assert [1, 2, 3].collect{ it * 2 } == [2, 4, 6]
assert [1, 2, 3]*.multiply(2) == [2, 4, 6]
Groovy Collections
//union
def a = [1,2,3,4] as Set
def b = [3,4,5,6] as Set
def union = a + b
assert union == [1,2,3,4,5,6] as Set
//intersection
def intersection = a.intersect(b)
assert intersection == [3, 4] as Set
Clousures
//The traditional Way
def sum(n) {
total = 0
for(int i = 2; i <= n; i += 2) {
total += i
}
total
}
def product(n) {
prod = 1
for(int i = 2; i <= n; i += 2) {
prod *= i
}
prod
}
assert sum(10) == 30
assert product(10) == 3840
Clousures
//The groovy Way
def calcEven(n, block) {
for(int i = 2; i <= n; i += 2) {
block(i)
}
}
//print even elements
calcEven(10, { print "$it," } ) //2,4,6,8,10,
//sum
totalSum = 0
calcEven(10, { totalSum += it } )
assert totalSum == 30
//product
def totalProduct = 1
calcEven(10) { totalProduct *= it }
assert totalProduct == 3840
Fácil de Testar
● Spock Framework
– Testes de unidade
para Java e Groovy.
– Inspirado em JUnit,
RSpec, jMock,
Mockito, Groovy,
Scala.
Spock Framework
import spock.lang.Specification
/**
* Created by joao on 11/02/15.
*/
class JStringSorterSpec extends Specification
{ ... }
Spock Framework
def "deve ordenar strings em ordem alfabetica"(){
given:
def sorter = new JStringSorter()
when:
def palavrasOrdenadas=sorter.sortAlpha(palavras)
then:
palavrasOrdenadas == palavrasEsperadas
where:
palavras || palavrasEsperadas
['b','a','c'] || ['a','b','c']
['h','g','f'] || ['f','g','h']
}
Spock Framework
def "deve ordenar strings em ordem crescente do
tamnho da string"(){
expect:
new JStringSorter().sortByAscLength(palavras)
palavras_esperadas
where:
palavras || palavras_esperadas
['b','a','c'] || ['b','a','c']
['ba','a','ccc'] || ['a','ba','ccc']
}
Groovy Script
Como funciona
Groovy JDK (GDK)
Ecossistema Groovy
Aplicações
● Desenvolvimento Web (Grails, Ratpack, …)
– Integração direta com Java EE 7/8
● Biblioteca de concorrência e processamento
assíncrono (Gpars),
● Frameworks de Teste (Spock),
● Ferramentas de Build (Gradle),
● Analise de Código (Codnarc),
● Aplicações Descktop (Griffon)
Projeto TOI
Considerações
● Os projetos geralmente tem diferentes
necessidades, para cada uma delas pode
existir diferentes soluções tecnológicas.
● Pequenas ações podem melhorar
significativamente nossa produtividade.
Importante:
● “Quanto menos eu escrevo, menos chances
tenho de errar” - Thiago Pinto.
Referências
● http://groovy-lang.org/
● http://glaforge.appspot.com/
● http://mrhaki.blogspot.fr/
Obrigado!
@lourencoccc
https://github.com/joaolourenco/lab-groovy

Mais conteúdo relacionado

Mais procurados

Mais procurados (11)

Jug bizus
Jug   bizusJug   bizus
Jug bizus
 
Nossa experiência com TDD
Nossa experiência com TDDNossa experiência com TDD
Nossa experiência com TDD
 
Docker para testers - Um passeio fora da caixa
Docker para testers - Um passeio fora da caixaDocker para testers - Um passeio fora da caixa
Docker para testers - Um passeio fora da caixa
 
TDD - Test Driven Development (em PHP)
TDD - Test Driven Development (em PHP)TDD - Test Driven Development (em PHP)
TDD - Test Driven Development (em PHP)
 
PHP fora da Web
PHP fora da WebPHP fora da Web
PHP fora da Web
 
Java 05
Java 05Java 05
Java 05
 
Gerenciamento de dependências em python
Gerenciamento de dependências em pythonGerenciamento de dependências em python
Gerenciamento de dependências em python
 
[Curso Java Basico - Exceptions] Aula 48: multiplos catch
[Curso Java Basico - Exceptions] Aula 48: multiplos catch[Curso Java Basico - Exceptions] Aula 48: multiplos catch
[Curso Java Basico - Exceptions] Aula 48: multiplos catch
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
OOP ObjC
OOP ObjCOOP ObjC
OOP ObjC
 
PHP e Mysql - DELETE
PHP e Mysql - DELETEPHP e Mysql - DELETE
PHP e Mysql - DELETE
 

Semelhante a Groovy na plataforma Java

Indo além na jvm com grails - UFOP
Indo além na jvm com grails - UFOPIndo além na jvm com grails - UFOP
Indo além na jvm com grails - UFOPFelipe Zampa
 
Produtividade em Java com Grails
Produtividade em Java com GrailsProdutividade em Java com Grails
Produtividade em Java com GrailsWanderson Oliveira
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javJulio Viegas
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - BrazilStephen Chin
 
Template method pattern
Template method patternTemplate method pattern
Template method patternEriko Morais
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesOziel Moreira Neto
 
Introdução ao java fx e visage
Introdução ao java fx e visageIntrodução ao java fx e visage
Introdução ao java fx e visagejesuinoPower
 
Plataforma java: detalhes da JVM
Plataforma java: detalhes da JVMPlataforma java: detalhes da JVM
Plataforma java: detalhes da JVMCaelum
 
Coding Dojo e Test Driven Development
Coding Dojo e Test Driven DevelopmentCoding Dojo e Test Driven Development
Coding Dojo e Test Driven DevelopmentRodrigo Alves Vieira
 
Coding Dojo e Test Driven Development
Coding Dojo e Test Driven DevelopmentCoding Dojo e Test Driven Development
Coding Dojo e Test Driven Developmentpugpe
 
Grails: Java produtivo e divertido
Grails: Java produtivo e divertidoGrails: Java produtivo e divertido
Grails: Java produtivo e divertidoLucas Teixeira
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao javaArmando Daniel
 
O que mudou no Ruby 1.9
O que mudou no Ruby 1.9O que mudou no Ruby 1.9
O que mudou no Ruby 1.9Nando Vieira
 
Linguagens Dinamicas na JVM
Linguagens Dinamicas na JVMLinguagens Dinamicas na JVM
Linguagens Dinamicas na JVMWilliam Gouvea
 

Semelhante a Groovy na plataforma Java (20)

Indo além na jvm com grails - UFOP
Indo além na jvm com grails - UFOPIndo além na jvm com grails - UFOP
Indo além na jvm com grails - UFOP
 
Minicurso groovy grails
Minicurso groovy grailsMinicurso groovy grails
Minicurso groovy grails
 
Java 9, 10 e ... 11
Java 9, 10 e ... 11Java 9, 10 e ... 11
Java 9, 10 e ... 11
 
Produtividade em Java com Grails
Produtividade em Java com GrailsProdutividade em Java com Grails
Produtividade em Java com Grails
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
 
Java7 tdc2011
Java7 tdc2011Java7 tdc2011
Java7 tdc2011
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil
 
Template method pattern
Template method patternTemplate method pattern
Template method pattern
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
Introdução ao java fx e visage
Introdução ao java fx e visageIntrodução ao java fx e visage
Introdução ao java fx e visage
 
Plataforma java: detalhes da JVM
Plataforma java: detalhes da JVMPlataforma java: detalhes da JVM
Plataforma java: detalhes da JVM
 
Coding Dojo e Test Driven Development
Coding Dojo e Test Driven DevelopmentCoding Dojo e Test Driven Development
Coding Dojo e Test Driven Development
 
Coding Dojo e Test Driven Development
Coding Dojo e Test Driven DevelopmentCoding Dojo e Test Driven Development
Coding Dojo e Test Driven Development
 
Javascript
JavascriptJavascript
Javascript
 
Grails: Java produtivo e divertido
Grails: Java produtivo e divertidoGrails: Java produtivo e divertido
Grails: Java produtivo e divertido
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
 
O que mudou no Ruby 1.9
O que mudou no Ruby 1.9O que mudou no Ruby 1.9
O que mudou no Ruby 1.9
 
Curso de Groovy
Curso de GroovyCurso de Groovy
Curso de Groovy
 
Linguagens Dinamicas na JVM
Linguagens Dinamicas na JVMLinguagens Dinamicas na JVM
Linguagens Dinamicas na JVM
 
Introdução ao Apache Ant
Introdução ao Apache AntIntrodução ao Apache Ant
Introdução ao Apache Ant
 

Groovy na plataforma Java

  • 2. Objetivos ● Plataforma Java ● Linguagem Groovy ● Recursos ● Aplicações ● Demostração de Código ● Projeto TOI ● Considerações
  • 3. Plataforma Java ● Três pilares da plataforma: – O Java Virtual Machine (JVM) – O Java Development Kit (JDK) – Muitas linguagens rodam na JVM
  • 5. Por que outra linguagem?
  • 6. Por que não Java? ● Existe problemas que Java resolve fácil, no entanto existe muitos outros que Java dificulta o trabalho. ● Para estas dificuldades devemos considerar alternativas.
  • 10. Origem ● Criada por James Strachan em 2013 ● Desenvolvedores: – Guillaume LaForge (Gerente de Projeto) – Jochen Theodorou (Lider técnico) – Paul King – Cedric Champeau ● Patrocinador Principal – Até março/2015 - Pivotal – A partir de abril/2015 - Fundação Apache
  • 11. Princípios ● “Java é ótimo para ferramentas, bibliotecas e infraestrutura” ● “Groovy é ótimo para todo o resto”. ● “Use Java onde Java trabalha bem”. ● “Use Groovy onde você quer facilitar sua vida”.
  • 12. Características ● Muitas funcionalidades poderosas inspiradas no Python, Ruby e Smaltalk ● Menos burocracia ● Dinâmica/Tipada ● Orientada a Objetos ● Linguagem de Script ● Executa na JVM
  • 13. Recursos Interessantes ● Tipagem Dinâmica ● Clousures/lambda ● Collections ● Facilita os Testes ● Scripts
  • 14. Tipagem Dinâmica def valor = 200.0 //BigDecimal assert valor.class == BigDecimal valor = '200' //String assert valor.class == String def coisas = ['Ola'] coisas << 73 coisas << 56.0 coisas << true assert coisas.class == ArrayList assert coisas == ['Ola', 73, 56.0, true] assert coisas*.class == [ String, Integer, BigDecimal,Boolean ] assert coisas.collect{it.class} == [ String, Integer, BigDecimal,Boolean ]
  • 15. Groovy Collections //List def list = [5, 6, 7, 8] assert list.size == 4 assert list.size() == 4 assert list.class == ArrayList //Range assert 5..8 == [5,6,7,8] assert 5..<8 == [5, 6, 7]
  • 16. Groovy Collections //each def n=0 (1..10).each{ n += it } assert n == 55 //find assert [1, 2, 3].find{ it > 1 } == 2 assert [1, 2, 3].findAll{ it > 1 } == [2, 3]
  • 17. Groovy Collections //sort def listAll= ['e','d','c','b','a'] listAll.sort(true) assert listAll == ['a','b','c','d','e'] //reverse listAl == ['a','b','c','d','e'] assert listAl.reverse() == ['e','d','c','b','a'] assert listAl == ['a','b','c','d','e']
  • 18. Groovy Collections //collect assert [1, 2, 3].collect{ it * 2 } == [2, 4, 6] assert [1, 2, 3]*.multiply(2) == [2, 4, 6]
  • 19. Groovy Collections //union def a = [1,2,3,4] as Set def b = [3,4,5,6] as Set def union = a + b assert union == [1,2,3,4,5,6] as Set //intersection def intersection = a.intersect(b) assert intersection == [3, 4] as Set
  • 20. Clousures //The traditional Way def sum(n) { total = 0 for(int i = 2; i <= n; i += 2) { total += i } total } def product(n) { prod = 1 for(int i = 2; i <= n; i += 2) { prod *= i } prod } assert sum(10) == 30 assert product(10) == 3840
  • 21. Clousures //The groovy Way def calcEven(n, block) { for(int i = 2; i <= n; i += 2) { block(i) } } //print even elements calcEven(10, { print "$it," } ) //2,4,6,8,10, //sum totalSum = 0 calcEven(10, { totalSum += it } ) assert totalSum == 30 //product def totalProduct = 1 calcEven(10) { totalProduct *= it } assert totalProduct == 3840
  • 22. Fácil de Testar ● Spock Framework – Testes de unidade para Java e Groovy. – Inspirado em JUnit, RSpec, jMock, Mockito, Groovy, Scala.
  • 23. Spock Framework import spock.lang.Specification /** * Created by joao on 11/02/15. */ class JStringSorterSpec extends Specification { ... }
  • 24. Spock Framework def "deve ordenar strings em ordem alfabetica"(){ given: def sorter = new JStringSorter() when: def palavrasOrdenadas=sorter.sortAlpha(palavras) then: palavrasOrdenadas == palavrasEsperadas where: palavras || palavrasEsperadas ['b','a','c'] || ['a','b','c'] ['h','g','f'] || ['f','g','h'] }
  • 25. Spock Framework def "deve ordenar strings em ordem crescente do tamnho da string"(){ expect: new JStringSorter().sortByAscLength(palavras) palavras_esperadas where: palavras || palavras_esperadas ['b','a','c'] || ['b','a','c'] ['ba','a','ccc'] || ['a','ba','ccc'] }
  • 29. Aplicações ● Desenvolvimento Web (Grails, Ratpack, …) – Integração direta com Java EE 7/8 ● Biblioteca de concorrência e processamento assíncrono (Gpars), ● Frameworks de Teste (Spock), ● Ferramentas de Build (Gradle), ● Analise de Código (Codnarc), ● Aplicações Descktop (Griffon)
  • 31. Considerações ● Os projetos geralmente tem diferentes necessidades, para cada uma delas pode existir diferentes soluções tecnológicas. ● Pequenas ações podem melhorar significativamente nossa produtividade. Importante: ● “Quanto menos eu escrevo, menos chances tenho de errar” - Thiago Pinto.
  • 32.