Introducción a Groovy

dhighwayman 822 views 35 slides Jul 25, 2011
Slide 1
Slide 1 of 35
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35

About This Presentation

No description available for this slideshow.


Slide Content

Introducción a
http://twitter.com/highwayman
[email protected]
http://linkd.in/davidsantamaria
por David Santamaria

Agenda
•¿Que es Groovy?
•¿Por que Groovy?
•Goodies.
•Mejoras respecto a Java.
•Comenzamos.
•Lenguaje Basicos.

¿Qué es Groovy?
Groovy es un lenguaje Dinamico para la JVM que permite el
uso de caracteristicas de otros lenguajes como Ruby para la
comunidad Java.
http://groovy.codehaus.org/

¿Qué mas es Groovy?
Groovy también es ...
agil, dinamico, compacto, sin curva de aprendizaje, con DSL,
soporte de scripts, Totalmente OO, Integrado con Java
(Sintaxis Java y Produce Bytecode).

¿Qué es Groovy? (para los developers)
Groovy es un "superset" de Java.
Groovy = Java - Boiler Plate Code
+ Dynamic Typing
+ Closures
+ DSL
+ Builders
+ Metaprograming
+ GDK
- Errores de compilacion
- Ligeramente mas lento

¿Por que Groovy?
•Java Platform!
oSe ejecuta en la JVM (si hay una JVM puedes ejecutar Groovy).
oUsa librerias Java.
oEmbebida en Aplicaciones de Escritorio Java.
oEmbebida en aplicaciones J2EE
oTest con JUnit
oDebug con Eclipse, IntelliJ, Netbeans.
oCode Coverage con Cobertura.
•No requiere aprender nuevas APIS (Jython, JRuby,...)
•Rhino es interesante pero es JavaScript :)

Goodies
•Tipado Dinamico y estatico.
•Totalmente orientado a objetos. (Todo es un Objeto)
•Closures.
•Sobrecarga de operadores.
•Multimethods.
•Declaracion Literal de Listas (Arrays), maps, ranges, y
expresiones regulares. (Soporte Nativo!)
•Metaprogramación.
•Y Mas...
oGPath.
oBuilders.
oGroovy Beans.

HelloWorld.java
public class HelloWorld {
public static void main(String[] args){
HelloWorld hw = new HelloWorld();
hw.setNombre("Groovy");
System.out.println(hw.saluda());
}
String nombre;
public String getNombre() { return nombre; }
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String saluda(){ return "Hola " + nombre;}
}

HelloWorld.groovy
public class HelloWorld {
public static void main(String[] args){
HelloWorld hw = new HelloWorld();
hw.setNombre("Groovy");
System.out.println(hw.saluda());
}
String nombre;
public String getNombre() { return nombre; }
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String saluda(){ return "Hola " + nombre;}
}

HelloWorld.groovy
public class HelloWorld {
public static void main(String[] args){
HelloWorld hw = new HelloWorld()
hw.setNombre("Groovy")
System.out.println(hw.saluda())
}
String nombre;
public String getNombre() { return nombre }
public void setNombre(String nombre) {
this.nombre = nombre
}
public String saluda(){ return "Hola " + nombre}
}
; opcionales!

HelloWorld.groovy
class HelloWorld {
static void main(String[] args){
HelloWorld hw = new HelloWorld()
hw.setNombre("Groovy")
System.out.println(hw.saluda())
}
String nombre;
String getNombre() { return nombre }
void setNombre(String nombre) {
this.nombre = nombre
}
String saluda(){ return "Hola " + nombre}
}
public por defecto!

HelloWorld.groovy
class HelloWorld {
static void main(String[] args){
HelloWorld hw = new HelloWorld()
hw.nombre("Groovy")
System.out.println(hw.saluda())
}
String nombre;
String saluda(){ return "Hola " + nombre}
}
getters and setters autogenerados!

HelloWorld.groovy
class HelloWorld {
static void main(String[] args){
HelloWorld hw = new HelloWorld()
hw.nombre("Groovy")
System.out.println(hw.saluda())
}
String nombre;
String saluda(){ "Hola " + nombre}
}
return opcional!

HelloWorld.groovy
class HelloWorld {
static void main(String[] args){
HelloWorld hw = new HelloWorld()
hw.nombre("Groovy")
System.out.println(hw.saluda())
}
def nombre;
def saluda(){ "Hola " + nombre}
}
Tipado Dinamico!

HelloWorld.groovy
class HelloWorld {
static void main(String[] args){
HelloWorld hw = new HelloWorld()
hw.nombre("Groovy")
println(hw.saluda())
}
def nombre;
def saluda(){ "Hola " + nombre}
}
Incluido por defecto:
•java.io.*
•java.lang.*
•java.math.BigDecimal
•java.math.BigInteger
•java.net.*
•java.util.*
•groovy.lang.*
•groovy.util.*

HelloWorld.groovy
class HelloWorld {
static void main(String[] args){
HelloWorld hw = new HelloWorld()
hw.nombre("Groovy")
println(hw.saluda())
}
def nombre
def saluda(){ "Hola ${nombre}" }
}
GStrings!

HelloWorld.groovy
HelloWorld hw = new HelloWorld()
hw.nombre("Groovy")
println(hw.saluda())
class HelloWorld {
def nombre
def saluda(){ "Hola ${nombre}" }
}
Declaracion de clases opcional para Scripts!

HelloWorld.groovy
HelloWorld hw = new HelloWorld()
hw.nombre "Groovy"
println hw.saluda()
class HelloWorld {
def nombre
def saluda(){ "Hola ${nombre}" }
}
Parentesis opcionales en la mayoria de casos.

HelloWorld.java
public class HelloWorld {
public static void main(String[] args){
HelloWorld hw = new HelloWorld();
hw.setNombre("Groovy");
System.out.println(hw.saluda());
}
String nombre;
public String getNombre() { return nombre; }
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String saluda(){ return "Hola " + nombre;}
}

HelloWorld.groovy
HelloWorld hw = new HelloWorld()
hw.nombre "Groovy"
println hw.saluda()
class HelloWorld {
def nombre
def saluda(){ "Hola ${nombre}" }
}

Comenzamos!
•Descargamos la ultima version de Groovy
http://groovy.codehaus.org/
•Descomprimimos en un directorio.
•Añadimos la variable de entorno GROOVY_HOME .
Y %GROOVY_HOME%/bin a la variable PATH.
•Escribimos groovy -version

Comenzamos! (II)
groovyconsole
println "Hola Mundo!"
Ctrl + R

Lenguaje: Strings and GStrings.
•Comillas Simples para
Strings.
•Comillas dobles para
GStrings: Son como Strings
pero soportan
expresiones: ${expression}.
•Strings multi-linea.

Lenguaje: Strings and GStrings.
•Slashy Strings: Como GStrings con soporte para
Expresiones Regulares.
•- Muchas mas operaciones...
http://groovy.codehaus.org/Strings+and+GString
http://groovy.codehaus.org/JN1525-Strings

Lenguaje: Numbers
Java:
•Java soporta tipos primitivos y Objetos.
•Tiene Wrappers para permitir la conversion.
•Java 5+ hay autoboxing /autoUnboxing.
Groovy:
•Todo es un objeto en el lenguaje.
oEl realiza el autoboxing cuando es mezclado con Java.
•BigDecimal es el tipo por defecto (excepto Integers).
•Sobrecarga de operadores.
http://groovy.codehaus.org/JN0515-Integers
http://groovy.codehaus.org/JN0525-Decimals
http://groovy.codehaus.org/JN0535-Floats

Lenguaje: Numbers

Lenguaje: Collections
Map map = new HashMap()
map.put("nombre", "David")
map.put("edad",30);
map.get("valor");
List list = new ArrayList(
Arrays.asList(
"primero", "segundo"));
list.add("tercero");
def map = [nombre: "David", edad:30]
map.valor
map["valor"]
def list = ["primero","segundo"]
list << "tercero"
Syntaxis Nativa en colecciones:
Java: Groovy:

Lenguaje: Bucles
for (String s: list) {
System.out.println(s);
}
for (int n=1; n<6; n++){
System.out.println(n);
}
list.each {
println it
}
l.upto 5,{
println it
}
Java: Groovy:

Lenguaje: GDK
import java.io.*;
public classReadFile {
public static void main(String[] args){
try{
BufferedReader br = new BufferedReader(
new FileReader(
new File("file.txt")));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch(IOException e) {
e.printStackTrace();
}
}
new File(file.txt).echLine { String line ->
println line
}
Java:
Groovy:

Lenguaje: Closures
//suma
def sum = 0
[1, 2, 3].each { item -> sum += item }
println "Total ${sum}"
// listar
def text = customers.collect{ item ->
item.name }.join(",")
// llamar a un Closure
def c = { name -> println "Hola ${name}"}
c("David")
Definición de Closures

Lenguaje: Closures
//Simple Loops
5.times { print it }
-> 01234
//Strings
'dog'.each { c -> println c }
-> d
-> o
-> g
//Lists and Arrays
[1,2,'dog'].each { print it }
-> 12dog
//Maps
['rod':33, 'james':35].each {
print "${it.key}=${it.value} "
}
-> james=35 rod=33
Iteración en Closures

Lenguaje: GDK
•String
ocontains(), count(), execute(), padLeft(),
center(), padRight(), reverse(), tokenize(), each(), etc.
•Collection
ocount(), collect(), join(), each(), reverseEach(), find/All(),
min(), max(), inject(), sort(), etc.
•File
oeachFile(), eachLine(), withPrintWriter(), write(), getText(),
etc.

Lenguaje: MarkupBuilder
import groovy.xml.*
def page = new MarkupBuilder()
page.html {
head { title 'Hola' }
body{
ul {
1.upto 5, { li "Mundo ${it}"}
}
}
}
<html>
<head>
<title>Hola</title>
</head>
<body>
<ul>
<li>Mundo 1</li>
<li>Mundo 2</li>
<li>Mundo 3</li>
<li>Mundo 4</li>
<li>Mundo 5</li>
</ul>
</body>
</html>

Mas Groovy
- Groovy Doc:
http://groovy.codehaus.org/
- Groovy Koans:
https://github.com/cjudd/groovy_koans

Preguntas...