Groovy para programadores Java Alberto Vilches http://albertovilches.com Twitter: @albertovilches
May 31, 2015
Groovy para programadores Java
Alberto Vilches
http://albertovilches.com Twitter: @albertovilches
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Sobre mi
Responsable desarrollo Java/Grails en Fundador del evento Evangelizador Groovy y Grails http://albertovilches.com Twitter: @albertovilches
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
agenda
Antes de empezar Qué es Groovy Groovy Console Testing con Groovy Compilandor Config Slurper Algunas cosas más
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Antes de empezar
GROOVY != GRAILS
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
¿Qué diferencia hay?
Groovy -> Lenguaje
Grails -> Plataforma desarrollo Web
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
¿Qué diferencia hay?
Groovy -> Lenguaje Compilador y GDK
groovy-1.8.x.jar
Grails -> Plataforma desarrollo Web
Groovy + Spring + Hibernate + Sitemesh + DBCP + Apache commons + Log4J + Junit + Ant +
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Antes de empezar
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Antes de empezar
JPA
Java app
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Antes de empezar
JPA
Java app
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Antes de empezar
¡No necesito Grails para usar Groovy desde mi aplicación
Java!
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
¿Qué es Groovy?
Groovy es Java. Dinámico Inspirado en Ruby, Python y Smalltalk OOP puro Closures, Gstrings, Builders, DSL
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
¿Qué es Groovy?
Groovy es Java. Dinámico Inspirado en Ruby, Python y Smalltalk OOP puro Closures, Gstrings, Builders, DSL No compile type-checking Ligeramente más lento que Java
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Lenguaje groovy
Punto y coma opcionales Clases y métodos public por defecto
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Lenguaje groovy
Punto y coma opcionales Clases y métodos public por defecto Getters y setters automáticos Tipado opcional: def
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Lenguaje groovy
Punto y coma opcionales Clases y métodos public por defecto Getters y setters automáticos Tipado opcional: def Interpolación de cadenas: “hola $foo” Sintaxis nativa para colecciones: [] y [:]
list << value Sobrecarga de operadores
if (saludo == “hola”)
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Sintaxis nativa Colecciones
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
gdk
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
gdk
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
xml
a
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Groovy Console
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Groovy console
http://groovyconsole.appspot.com groovyConsole App
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Testing
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Testing con groovy
Power Asserts GroovyTestCase Mocking
Closure as OnlyOneMethodInterface Map as Interface Expando MOP mockFor / stubFor
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
GROOVY power asserts
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
GROOVY power asserts
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
GROOVY power asserts
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Groovy test case
Añade nuevos assert* Y algunos métodos como
shouldFail o notImplementedYet
Nombres de métodos largos
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Groovy test case
Añade nuevos assert* Y algunos métodos como
shouldFail o notImplementedYet
Nombres de métodos largos
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Mocking con groovy
Closure as OnlyMethodInterface
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Mocking con groovy
Map as Interface
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Mocking con groovy
MOP: Meta Object Protocol
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Mocking con groovy
Expando
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Mocking con groovy
a
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Mocking con groovy
a
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Mocking con groovy
a
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
testing
¿Qué necesito para usar todo esto?
groovy-1.8.jar en tu CLASSPATH
Tus tests deben ser clases Groovy
Heredar de GroovyTestCase (opcional)
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Testing: spock
http://code.google.com/p/spock/
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Compilador
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
compilador
Leer
Compilar
Cargar
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
compilador
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Compilador: leer
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Compilador: compilar
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Compilador: cargar
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Compilador: cargar
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Compilador groovy
GroovyShell Script Eval.me()
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Compilador: leer
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Compilador: leer
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Compilador: leer
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
compilador
¡Leer + compilar + cargar + ejecutar!
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
compilador
¡Leer + compilar + cargar + ejecutar!
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
compilador ¡Leer + compilar + cargar + ejecutar!
SALIDA
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
compilador ¡Leer + compilar + cargar + ejecutar!
baseImponible IRPF IVA codigo
String
ENTRADA
SALIDA
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
compilador ¡Leer + compilar + cargar + ejecutar!
baseImponible IRPF IVA codigo
String
ENTRADA
SALIDA
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
compilador ¡Leer + compilar + cargar + ejecutar!
baseImponible IRPF IVA codigo
String
ENTRADA
SALIDA
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
compilador
Groovy Templates
ENTRADA
SALIDA
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Groovy templates
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Groovy templates
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Groovy templates
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Resumen
Scripts Pueden incluir definiciones de clases. Pueden recibir un Binding con variables. Puede retornar un objeto:
String, Collection, Integer, etc. La instancia de una clase que se define en el propio Script. Un objeto class de este misma clase con el que luego trabajar.
Templates Pueden recibir un Map con variables. Siempre devuelve un String.
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Config Slurper
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Config slurper
Alternativa a los ficheros Properties No texto plano -> ¡código groovy! Valores nativos, no solo Strings Anidado opcional
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Config slurper
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Config slurper
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Config slurper
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Config slurper
Agrupación por entornos
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Config slurper
Agrupación por entornos server.port = 8090 sobrescribe el valor 80, solo si
el entorno es development
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Config slurper
Como leer un fichero de configuración desde Java:
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
SCRIPTS
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Scripts
#!/usr/bin/env groovy
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Scripts
#!/usr/bin/env groovy
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
SCRIPTS + SQL
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Scripts + sql
a
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Scripts + sql
a
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
Scripts + sql
a
Alberto Vilches @albertovilches – Grupo de usuarios de Groovy de Madrid
¡GRACIAS!
¿Preguntas?