2024: Domino Containers - The Next Step. News from the Domino Container commu...
Groovy Up Your Code
1. GROOVY UP YOUR CODE
Paulo Traça
CTO
paulo.traca@logical-software.com
LOGICAL SOFTWARE
Human Capital | Enterprise Java | Research
Rua Gago Coutinho nº4 B
2675-509 Odivelas
T +351 21 931 50 33
F +351 21 931 82 52
E info@logical-software.com
Web www.logical-software.com
2. Groovy Up Your Code
Objectivos da Sessão
Conhecer as principais potencialidade dos Groovy
●
Perceber em que o Groovy pode ser útil
●
“Be more Groovy” :-)
●
3. Groovy Up Your Code
Agenda
O que é o Groovy ?
●
Será que preciso de mais uma linguagem de scripting ?
●
Características Básicas
●
Características Avançadas
●
The Goodies
●
Demos
●
Conclusão
●
Referências
●
Q&A
●
4. Groovy Up Your Code
Agenda
O que é o Groovy ?
●
Será que preciso de mais uma linguagem de scripting ?
●
Características Básicas
●
Características Avançadas
●
Demos
●
The Goodies
●
Conclusão
●
Referências
●
Q&A
●
5. Groovy Up Your Code
O que é o Groovy ?
“JAVA ON STEROIDS ...”
e não é ilegal...
“ Groovy is like a super version of Java. It can leverage Java's
enterprise capabilities but also has cool productivity features like closures,
builders and dynamic typing. If you are a developer, tester or script guru, you
have to love Groovy.”
6. Groovy Up Your Code
O que é Groovy
Linguagem ágil para JVM
●
Sintaxe idêntica Java, curva da aprendizagem baixa para prog.
●
Java
Linguagem dinâmica, Orientada a objectos
●
Características da linguagem derivadas do Ruby, Python e
●
SmallTalk
JCP 241
●
7. Groovy Up Your Code
O que é Groovy
Suporte para DSL's (Domain Specific Languages)
●
Suporte para Shell/ Builds scripts [cat | grep ... / Ant DSL]
●
Unit Testing and Mock Object “out of the Box”
●
Totalmente compatível com JAVA objects e bibliotecas
●
Compila directamente para JVM bytecode
●
8. Groovy Up Your Code
Agenda
O que é o Groovy ?
●
Será que preciso de mais uma linguagem de scripting ?
●
Características Básicas
●
Características Avançadas
●
Demos
●
The Goodies
●
Conclusão
●
Referências
●
Q&A
●
9. Groovy Up Your Code
Porque investir no Groovy ?
Proliferação de linguagens de scripting
●
“The c00l new guy” - Ruby / RoR
●
“The c00l new guy – Take 2” JRuby
●
Python, Smalltalk ... { fill in with your favorite scripting language }
●
10. Groovy Up Your Code
O que torna o Groovy diferente ?
JAVA / JVM compatível
●
Se sabes JAVA, praticamente sabes Groovy
●
Não obriga um novo investimento para aprender uma nova linguagem /
●
nova sintaxe
Tira partido de toda infra-estrutura JEE, com +10 anos de maturidade
●
Deploy directo para qualquer container JEE
●
Reutiliza todos o investimento feito a aprender um conjunto de tools em
●
volta da plataforma JAVA [Sprint / Hibernate / Maven / Ant / JPA..]
Permite “Mix and Match” entre código JAVA e código Groovy
●
11. Groovy Up Your Code
O que torna o Groovy diferente ?
All the JAVA Good Stuff
●
Threading, Security, debugging
●
Annotations (ver 1.1-betas/RC*)
●
Tipos estáticos e tipos dinâmicos “Duck Typing”
●
12. Groovy Up Your Code
The Landscape of JVM Languages
Feature rich Optional
types
other
Groovy
other
Dynamic feature call
for dynamic types
Java bytecode calls for
static type
other
other
Java Friendly
13. Groovy Up Your Code
public class Filter {
public static void main (String [] args) {
Sample Code Java
List list = new ArrayList();
list.add(“Rod”);
list.add(“Neta”);
list.add(“Eric”);
list.add(“Missy”);
Filter filter = newFilter();
List shorts = filter.filterLongerThan(list, 4);
System.out.println(shorts.size());
Iterator it = shorts.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
} //main
public List filterLonger(List list, int lenght) {
List result = new ArrayList();
Iterator it = list.iterator();
while(it.hasNext()) {
String item = it.next();
if (item.length() <= length) {result.add(item);}
}
} //filterLonger
} //Filter
14. Groovy Up Your Code
Sample Code Groovy
def list = [“Neeta”, “Rod”, “Eric”, “Missy”]
def shorts = list.findAll { it.size () <= 4 }
println shorts.size()
shorts.each { println it }
15. Groovy Up Your Code
Agenda
O que é o Groovy ?
●
Será que preciso de mais uma linguagem de scripting ?
●
Características Básicas
●
Características Avançadas
●
Demos
●
The Goodies
●
Conclusão
●
Referências
●
Q&A
●
16. Groovy Up Your Code
Características Básicas
Tipos dinâmicos e tipos estáticos (opcionais)
●
Sintaxe nativa para listas e mapas
●
Ranges
●
Closures
●
Overloading de operadores
●
Suporte para expressões regulares na linguagem
●
Groovy SDK
●
17. Groovy Up Your Code
Características Básicas
Tipos dinâmicos e tipos estáticos (opcionais)
int myVar = 3
def myVar = “Welcome to CodeBits”
Sintaxe nativa para listas e mapas
def myList = [“Code”, “Bits” , 2007 ]
printf myList[0]
-- Code
def myMap = [“CodeBits2007”: 400, “CodeBits:2008”:1100, “CodeBits:2008”:2000]
printf myMap[“CodeBits2007”] ou println myMap.CodeBits2007
-- 400
18. Groovy Up Your Code
Características Básicas(cont.)
Ranges
def alphabet = 'a'..'z'
for (letter in alphabet) {
print letter + ' '
}
-- a b c d e f g h i j k l m n o p q r s t u v w x y z
-----------------------------------------------------
for (count in 1..10) {
print count + ' '
}
19. Groovy Up Your Code
Características Básicas(cont.)
Closures
def simponsMap = [quot;Homerquot;:quot;donutsquot;, quot;Margequot;:quot;Big Blue Hairquot;, quot;Lisaquot;:quot;the Saxquot;]
simponsMap.each { name, what -> printf quot;$name Simpon likes $what.nquot;}
-- Homer Simpon likes donuts.
-- Marge Simpon likes Big Blue Hair.
-- Lisa Simpon likes The Sax.
Overloading de operadores
def list = [1,2,3,4,5,6] + [7,8,9,10]
list.each { print it }
-- 12345678910
20. Groovy Up Your Code
Características Básicas(cont.)
Suporte para expressões regulares na linguagem
if ( “name” ==~ “na.*”) { println “It a Match!”}
// -----------------------------------------------------------
def regexp = /Paulo.*/
def name1 = quot;PauloSilvaquot;
def name2 = quot;JoseSilvaquot;
def isFirstNamePaulo(name, reg) {
if (name ==~ reg) { println quot;matchnquot;}
}
isFirstNamePaulo(name1, regexp)
isFirstNamePaulo(name2, regexp)
21. Groovy Up Your Code
Características Básicas(cont.)
Groovy SDK - métodos extras ao JDK
Manipulação de string
●
center(), contains(), count(), each(), padLeft(), padRight(), getAt(), etc
●
Manipulação de colecções
●
reverseEach(), count(), collect(), join(),sort(), max(), min(), toList(), etc
●
File
●
EachFile(), withPrintWriter(), write(), getText(), etc
●
22. Groovy Up Your Code
Agenda
O que é o Groovy ?
●
Será que preciso de mais uma linguagem de scripting ?
●
Características Básicas
●
Características Avançadas
●
Demos
●
The Goodies
●
Conclusão
●
Referências
●
Q&A
●
23. Groovy Up Your Code
Características Avançadas
Suporte nativo para estruturas hierárquicas
●
XML
●
HTML
●
ANT
●
SWING
●
Navegação segura
●
Parâmetros com valores default
●
Currying
●
24. Groovy Up Your Code
Características Avançadas (Cont.)
Suporte para estruturas hierárquicas
●
Builders
●
NodeBuilder
●
DomBuilder
●
SwingBuilder
●
AntBuilder
●
...
●
Relativamente fácil acrescentar novos
●
25. Groovy Up Your Code
Características Avançadas (Cont.)
Navegação segura, com o operador (?)
●
def simpson = [quot;Homerquot;: [quot;donutsquot;:20, quot;bearquot;:50, quot;cakesquot;:40]]
println simpson.Homer.bear
-- 50
println simpson.marge.bear
-- NullPointerException
println simpson?.marge?.bear
-- null
27. Groovy Up Your Code
Características Avançadas (Cont.)
Currying
●
def c1 = {name, age, location -> println quot;Hi, I'm $name, i have $age and i'm from $location.quot;}
.......
def c2 = c1.curry(quot;Pauloquot;)
.......
def c3 = c2.curry(25)
println c3(quot;Portugalquot;)
-- Hi, I'm Paulo, i have 25 and i'm from Portugal.
29. Groovy Up Your Code
Agenda
O que é o Groovy ?
●
Será que preciso de mais uma linguagem de scripting ?
●
Características Básicas
●
Características Avançadas
●
Demos
●
The Goodies
●
Conclusão
●
Referências
●
Q&A
●
30. Groovy Up Your Code
The Goodies
Grails –Web framework
●
Integração com Web Service
●
GroovySoap (ver 1.0 )
●
GroovyWS (ver 1.1-RC*)
●
XML / RPC
●
Unit Testing Integrado
●
GroovyTestCase, GroovyMock
●
Shell scripting
●
Existem api disponíveis para pipes | cat | grep ...
●
Groosh module
●
31. Groovy Up Your Code
The Goodies
Groovy Jabber-RPC
●
Windows Active X ou COM [Scriptom 2.0 Beta]
●
Programar e controlar excel / office ...
Suporte para SQL com GSQL Module
●
Muito mais ...
●
Tooling
●
Eclipse
●
Intellij IDEA
●
32. Groovy Up Your Code
Agenda
O que é o Groovy ?
●
Será que preciso de mais uma linguagem de scripting ?
●
Características Básicas
●
Características Avançadas
●
Demos
●
The Goodies
●
Conclusão
●
Referências
●
Q&A
●
33. Groovy Up Your Code
Conclusões
Óptima tool para programadores Java
●
Pronta para projectos não “mission critical”
●
massa critica
●
Opção ao Ruby / Jruby
●
Algumas partes ainda estão em beta, e falta alguma documentação
●
“Lots of Rope to Hang Yourself”
●
34. Groovy Up Your Code
Referências
Web
●
http://groovy.codehaus.org
●
http://grails.org
●
Books
●
Groovy in Action- Manning 2007
●
Getting Started with Grial – InfoQ by Jason Rudolph
●
Groovy Recipes – Pragmatic Bookshelf
●