Groovy no es java sin punto y coma v3

74
Groovy Goodness PABLO ALBA CHAO #708090 Porque Groovy no es Java sin puntos y comas

Transcript of Groovy no es java sin punto y coma v3

Page 1: Groovy no es java sin punto y coma v3

Groovy Goodness

PABLO ALBA CHAO

#708090

Porque Groovy no es Java sin puntos y comas

Page 2: Groovy no es java sin punto y coma v3

Ego-slide

Pablo AlbaCTO en Kaleidos Open Source

http://kaleidos.net/708090/

http://albaontech.wordpress.com

@_pabloalba_

Page 3: Groovy no es java sin punto y coma v3

Episode I

Corrían los 90...

Page 4: Groovy no es java sin punto y coma v3

Corrían los 90...

Page 5: Groovy no es java sin punto y coma v3

Corrían los 90...

Page 6: Groovy no es java sin punto y coma v3

Corrían los 90...

Page 7: Groovy no es java sin punto y coma v3

Corrían los 90...

Page 8: Groovy no es java sin punto y coma v3

Corrían los 90...

BufferedReader br = new BufferedReader(new FileReader("file.txt"));try {

StringBuilder sb = new StringBuilder();String line = br.readLine();

while (line != null) { sb.append(line); sb.append(System.lineSeparator()); line = br.readLine();

}String everything = sb.toString();

} finally {br.close();

}

Page 9: Groovy no es java sin punto y coma v3

Corrían los 90...import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.MalformedURLException;import java.net.URL; public class Main { public static void main(String[] args) { try { URL google = new URL("http://www.google.com/"); BufferedReader in = new BufferedReader(newInputStreamReader(google.openStream())); String inputLine; while ((inputLine = in.readLine()) != null) System.out.println(inputLine); } in.close(); } catch (MalformedURLException me) { System.out.println(me); } catch (IOException ioe) { System.out.println(ioe); } }//end main

}

Page 10: Groovy no es java sin punto y coma v3

Episode II

Groovy

Page 11: Groovy no es java sin punto y coma v3

Groovy

● Los archivos llevan extensión .groovy● No lleva punto y coma al final● Es casi al 100% compatible con código java

¿Qué sabe mucha gente sobre Groovy?

Page 12: Groovy no es java sin punto y coma v3

Groovy

<<a flat learning curve for Java developers>>

Guillaume Laforge

Page 13: Groovy no es java sin punto y coma v3

Groovy

BufferedReader br = new BufferedReader(new FileReader("file.txt"));try {

StringBuilder sb = new StringBuilder();String line = br.readLine() ;

while (line != null) { sb.append(line) ; sb.append(System.lineSeparator()) ; line = br.readLine() ;

}String everything = sb.toString() ;

} finally {br.close();

}

Page 14: Groovy no es java sin punto y coma v3

Groovy

BufferedReader br = new BufferedReader(new FileReader(" file.txt"))try {

StringBuilder sb = new StringBuilder()String line = br.readLine()

while (line != null) { sb.append(line) sb.append(System.lineSeparator()) line = br.readLine()

}String everything = sb.toString()

} finally {br.close()

}

Page 15: Groovy no es java sin punto y coma v3

Groovy

File file = new File("file.txt"))String everything = file.text

Groovy goodness...

Page 16: Groovy no es java sin punto y coma v3

Groovy

URL url = "http://google.com ".toURL()print url.text

Groovy goodness...

Page 17: Groovy no es java sin punto y coma v3

Groovy

● No quiero trollear a Java

Disclaimer

● Java 8 ha dado un paso de gigante● Pero Groovy mola más ;)

Page 18: Groovy no es java sin punto y coma v3

Groovy

Hubert A. Klein Ikkink (MrHaki)

http://www.mrhaki.com/

Groovy Goodness: El libro

Page 19: Groovy no es java sin punto y coma v3

Episode III

Básicos y misceláneos de groovy

Page 20: Groovy no es java sin punto y coma v3

Básicos y misceláneos de groovy

public class Saludador {private String usuario;

public String getUsuario() {return usuario;

}

public void setUsuario(usuario) {this.usuario = usuario;

}

public String saluda(String nombre){return ("Hola " + nombre + ", yo soy " + usuario);

}}

Saludador saludador = new Saludador();

saludador.setUsuario("Pablo");

System.out.println(saludador.saluda("Guillaume"));

Puntos y coma opcionales

Page 21: Groovy no es java sin punto y coma v3

Básicos y misceláneos de groovy

public class Saludador {private String usuario

public String getUsuario() {return usuario

}

public void setUsuario(usuario) {this.usuario = usuario

}

public String saluda(String nombre){return ("Hola " + nombre + ", yo soy " + usuario)

}}

Saludador saludador = new Saludador()

saludador.setUsuario("Pablo")

System.out.println(saludador.saluda("Guillaume"))

Paréntesis opcionales

Page 22: Groovy no es java sin punto y coma v3

Básicos y misceláneos de groovy

public class Saludador {private String usuario

public String getUsuario() {return usuario

}

public void setUsuario(usuario) {this.usuario = usuario

}

public String saluda(String nombre){return "Hola " + nombre + ", yo soy " + usuario

}}

Saludador saludador = new Saludador()

saludador.setUsuario "Pablo"

System.out.println saludador.saluda("Guillaume")

Returns opcionales

Page 23: Groovy no es java sin punto y coma v3

Básicos y misceláneos de groovy

public class Saludador {private String usuario

public String getUsuario() {usuario

}

public void setUsuario(usuario) {this.usuario = usuario

}

public String saluda(String nombre){"Hola " + nombre + ", yo soy " + usuario

}}

Saludador saludador = new Saludador()

saludador.setUsuario "Pablo"

System.out.println saludador.saluda("Guillaume")

Public opcionales

Page 24: Groovy no es java sin punto y coma v3

Básicos y misceláneos de groovy

class Saludador {private String usuario

String getUsuario() {usuario

}

void setUsuario(usuario) {this.usuario = usuario

}

String saluda(String nombre){"Hola " + nombre + ", yo soy " + usuario

}}

Saludador saludador = new Saludador()

saludador.setUsuario "Pablo"

System.out.println saludador.saluda("Guillaume")

Tipos opcionales

Page 25: Groovy no es java sin punto y coma v3

Básicos y misceláneos de groovy

class Saludador {private String usuario

String getUsuario() {usuario

}

void setUsuario(usuario) {this.usuario = usuario

}

String saluda(String nombre){"Hola " + nombre + ", yo soy " + usuario

}}

def saludador = new Saludador()

saludador.setUsuario "Pablo"

System.out.println saludador.saluda("Guillaume")

Atajo para print

Page 26: Groovy no es java sin punto y coma v3

Básicos y misceláneos de groovy

class Saludador {private String usuario

String getUsuario() {usuario

}

void setUsuario(usuario) {this.usuario = usuario

}

String saluda(String nombre){"Hola " + nombre + ", yo soy " + usuario

}}

def saludador = new Saludador()

saludador.setUsuario "Pablo"

println saludador.saluda("Guillaume")

Getters y setters opcionales

Page 27: Groovy no es java sin punto y coma v3

Básicos y misceláneos de groovy

class Saludador {private String usuario

String saluda(String nombre){"Hola " + nombre + ", yo soy " + usuario

}}

def saludador = new Saludador()

saludador.setUsuario "Pablo"

println saludador.saluda("Guillaume")

Invocación al setter "mágica"

Page 28: Groovy no es java sin punto y coma v3

Básicos y misceláneos de groovy

class Saludador {private String usuario

String saluda(String nombre){"Hola " + nombre + ", yo soy " + usuario

}}

def saludador = new Saludador()

saludador.usuario = "Pablo"

println saludador.saluda("Guillaume")

Constructor por parámetros con nombre "mágico"

Page 29: Groovy no es java sin punto y coma v3

Básicos y misceláneos de groovy

class Saludador {private String usuario

String saluda(String nombre){"Hola " + nombre + ", yo soy " + usuario

}}

def saludador = new Saludador(usuario:"Pablo")

println saludador.saluda("Guillaume")

Cadenas interpoladas (GStrings)

Page 30: Groovy no es java sin punto y coma v3

Básicos y misceláneos de groovy

class Saludador {private String usuario

String saluda(String nombre){"Hola $nombre, yo soy $usuario"

}}

def saludador = new Saludador(usuario:"Pablo")

println saludador.saluda("Guillaume")

Reformateamos...

Page 31: Groovy no es java sin punto y coma v3

Básicos y misceláneos de groovy

class Saludador { private String usuario

String saluda(String nombre){"Hola $nombre, yo soy $usuario"

}}

def saludador = new Saludador(usuario:"Pablo")println saludador.saluda("Guillaume")

public class Saludador {private String usuario;

public String getUsuario() {return usuario;

}

public void setUsuario(usuario) {this.usuario = usuario;

}

public String saluda(String nombre){return ("Hola " + nombre + ", yo soy " + usuario);

}}

Saludador saludador = new Saludador();

saludador.setUsuario("Pablo");

System.out.println(saludador.saluda("Guillaume"));

Page 32: Groovy no es java sin punto y coma v3

Básicos y misceláneos de groovy

Page 33: Groovy no es java sin punto y coma v3

Básicos y misceláneos de groovy

Dinámico

def saluda() { def a = "hola mundo" println a a = 3 print a}

void despidete() {Integer a = 3println aa = "adios" // Error en tiempo de ejecuciónprintln a

}

Page 34: Groovy no es java sin punto y coma v3

Básicos y misceláneos de groovy

Estático. Si quieres.

import groovy.transform.CompileStatic

@CompileStaticvoid despidete() {

Integer a = 3println aa = "adios" //Error en tiempo de compilaciónprintln a

}

Page 35: Groovy no es java sin punto y coma v3

Básicos y misceláneos de groovy

Comparación de cadenas

def a = "hola"

assert "hola" == a

Page 36: Groovy no es java sin punto y coma v3

Básicos y misceláneos de groovy

Return opcional

String suma(int a, int b) { a + b}

assert suma(2, 3) == 5

Page 37: Groovy no es java sin punto y coma v3

Básicos y misceláneos de groovy

Asignación múltiple / Retorno múltiple

def iAmHere() { [29.20090, 12.90391]}

def (coordX, coordY) = iAmHere()

assert coordX == 29.20090assert coordY == 12.90391

Page 38: Groovy no es java sin punto y coma v3

Básicos y misceláneos de groovy

Listas (arrays)

//JAVAString[] lista = new String[] { "uno", "dos", "tres" };

//GROOVYdef lista = ['uno', 'dos', 'tres']

// En realidad son ArrayListlista.add(1000)assert 4 == lista.size()

Page 39: Groovy no es java sin punto y coma v3

Básicos y misceláneos de groovy

assert ["Murdock"] == equipo[2]

assert ["Hannibal", "Fenix"] == equipo[0..1]

assert ["Murdock", "Fenix"] == equipo[2..1]

assert ["Fenix", "Murdock", "MA"] == equipo[1..-1]

Listas: Sublistas

def equipo = ["Hannibal", "Fenix", "Murdock", "MA"]

Page 40: Groovy no es java sin punto y coma v3

Básicos y misceláneos de groovy

Mapas

//JAVAMap <String, String> mapa = new HashMap<String, String>();mapa.put("nombre", "Pablo");mapa.put("apellido", "Alba");

//GROOVYdef mapa = [nombre:"Pablo", apellido:"Alba"]

Page 41: Groovy no es java sin punto y coma v3

Básicos y misceláneos de groovy

Casting automático

String diTuNombre() { Integer a = 3}

def a = diTuNombre() assert a == "3"assert a.class == String

Page 42: Groovy no es java sin punto y coma v3

Básicos y misceláneos de groovy

La verdad en Groovy

assert !( null )assert !( "" )assert !( [] )assert !( [:] )assert !( 0 )

assert new Object()assert "string"assert [1, 2, 3]assert [a:1]assert 12345

Page 43: Groovy no es java sin punto y coma v3

Básicos y misceláneos de groovy

Groovy como lenguaje de scripting

println "Hola " + args[0]

meDaIgualElNombre.groovy

groovy meDaIgualElNombre.groovy Pablo

Page 44: Groovy no es java sin punto y coma v3

Episode IV

Operadores

Page 45: Groovy no es java sin punto y coma v3

Operadores

Navegación segura

// Modo "JAVA"if (company != null && company.getAddress() != null && company.getAddress().getStreet() != null) { println company.address.street.name}

// Modo "Groovy"println company?.address?.street?.name

Page 46: Groovy no es java sin punto y coma v3

Operadores

Operador Elvis

def text

// Operador ternario normaldef ternaryOutput = (text != null) ? text : 'Hello Groovy!'

// Operador Elvis// Esto se lee: 'Si text no es nulo, asigna text a// elvisOutput. De otra forma, asigna 'Viva Las Vegas!' a elvisOutput.def elvisOutput = text ?: 'Viva Las Vegas!'

Page 47: Groovy no es java sin punto y coma v3

Operadores

In

// Modo "JAVA"String[] list = {"a", "b", "c"};assert Arrays.asList(list).contains("a")

// Modo "GROOVY"def list = ["a", "b", "c"]assert "a" in list

Page 48: Groovy no es java sin punto y coma v3

Operadores

Multiplicación de String

println '-' * 80

// ----------------------------------------------------------------------------

Page 49: Groovy no es java sin punto y coma v3

Episode IV

Strings

Page 50: Groovy no es java sin punto y coma v3

Strings

def s1 = 'Esto es una cadena, y podemos usar "comillas dobles" \sin escaparlas’

Comillas simples

Page 51: Groovy no es java sin punto y coma v3

Strings

def s1 = ‘‘‘Esto es una cadena multilíneapodemos escribirun montón de líneassin preocuparnos de todoel lío de la concatenación’’’

Comillas simples triples

Page 52: Groovy no es java sin punto y coma v3

Strings

def s3 = /Podemos meter casi cualquier cosa en una "string" 'slasy' sin \escaparla. Se usa mucho para expresiones regulares/

Slashy

Page 53: Groovy no es java sin punto y coma v3

Strings

def s1 = "Esto es una cadena, y podemos usar ‘comillas simples’ \sin escaparlas"

Comillas dobles

Page 54: Groovy no es java sin punto y coma v3

Strings

def s1 = """Esto es una cadena multilíneapodemos escribirun montón de líneassin preocuparnos de todoel lío de la concatenación"""

Comillas dobles triples

Page 55: Groovy no es java sin punto y coma v3

Strings

def nombre = "Pablo"

def s1 = "Hola, $nombre"

assert s1 == "Hola, Pablo"

def edad = 37

def s2 = "En el 2050 tendrás ${edad + 34} años"

assert s2 == "En el 2050 tendrás 71 años"

GStrings

Page 56: Groovy no es java sin punto y coma v3

Strings

'42.42'.isNumber()

'42.42'.isDoble()

'42.42'.isFloat()

'42.42'.isInteger()

'42.42'.isLong()

¿Es un número?

Page 57: Groovy no es java sin punto y coma v3

Strings

def s = 'Acceder a las cadenas en Groovy es fácil.'

assert 'A' == s.getAt(0)

// Las cadenas funcionan como listas

assert 'A' == s[0]

assert 'Groovy' == s[25..30] // Podemos usar rangos.

Substrings

Page 58: Groovy no es java sin punto y coma v3

Strings

assert 'GROOVY' == 'groovy'.toUpperCase()

assert 'groovy' == 'GROOVY'.toLowerCase()

assert 'Groovy' == 'groovy'.capitalize()

Mayúsculas y minúsculas

Page 59: Groovy no es java sin punto y coma v3

Strings

def s = 'Esto en otros lenguajes es un dolor...'

String encoded = s.bytes.encodeBase64().toString()

assert 'RXN0byBlbiBvdHJvcyBsZW5ndWFqZXMgZXMgdW4gZG9sb3IuLi4=' == encoded

byte[] decoded = encoded.decodeBase64()

assert s == new String(decoded)

Base64

Page 60: Groovy no es java sin punto y coma v3

Episode V

Closures

Page 61: Groovy no es java sin punto y coma v3

Closures

def sumador = {a, b -> a + b }

assert sumador (3, 4) == 7

assert sumador (‘H’, ‘ola’) == ‘Hola’

Closure

Page 62: Groovy no es java sin punto y coma v3

Closures

def doblador = { it * 2}

assert doblador (3) == 6

assert doblador (‘H’) == ‘HH’

"it"

Page 63: Groovy no es java sin punto y coma v3

Closures

def multiplicador = { int a, int b = 10 -> a * b}

assert multiplicador (2, 3) == 6

assert multiplicador (5) == 50

//MissingMethodException//multiplicador (‘a’)

Valores por defecto

Page 64: Groovy no es java sin punto y coma v3

Closures

def printer = System.out.&println

printer "Hola"

Métodos como closures

Page 65: Groovy no es java sin punto y coma v3

Episode VI

Listas y mapas

Page 66: Groovy no es java sin punto y coma v3

Listas y mapas

assert 'Lobezno' == list.find { it == 'Lobezno' }

assert ['Tormenta', 'Rondador'] == list.findAll { it.size() > 7 }

assert 2 == list.findLastIndexOf { it.size() == 7 }

Listas: Buscando datosdef patrulla = ['Cíclope', 'Lobezno', 'Tormenta', 'Coloso', 'Rondador']

Page 67: Groovy no es java sin punto y coma v3

Listas y mapas

def patrulla = ['Cíclope', 'Lobezno', 'Tormenta', 'Coloso', 'Rondador']

Listas: Iteraciones

for (i = 0; i < 5; i++) { println patrulla[i]}

5.times{ println patrulla[it]}

patrulla.each{ println it}

Page 68: Groovy no es java sin punto y coma v3

Listas y mapas

def list = [2,5,1,9,3,4,2,8,9]

assert list.size() == 9assert list.sum() == 43assert list.max() == 9assert list.min() == 1assert list.count(9) == 2assert list.count{ it < 5 } == 5

list.sort()assert list == [1, 2, 2, 3, 4, 5, 8, 9, 9]

list.unique()assert list == [1, 2, 3, 4, 5, 8, 9]

Listas: Features ‘cool’

Page 69: Groovy no es java sin punto y coma v3

Listas y mapas

class Persona{String nombreint edad

}def personas = [

new Persona(nombre: "Pablo", edad: 36),new Persona(nombre: "Lucía", edad: 12),new Persona(nombre: "Isabel", edad: 11)

]def nombres = personas.findAll { it.edad < 18 }

.collect { it.nombre.toUpperCase() }

.join(', ')

assert nombres == "LUCÍA, ISABEL"

Listas: Filter / Map / Reduce

Page 70: Groovy no es java sin punto y coma v3

Episode VII

Ecosistema

Page 71: Groovy no es java sin punto y coma v3

Ecosistema

Page 72: Groovy no es java sin punto y coma v3

No es java sin punto y coma

Page 73: Groovy no es java sin punto y coma v3

¡Gracias!

¡Gracias!http://kaleidos.net/708090/

http://albaontech.wordpress.com

@_pabloalba_

Page 74: Groovy no es java sin punto y coma v3

¿Desea saber más?

http://greachconf.com/

Madrid, April 8th & 9th, 2016

http://www.meetup.com/madrid-gug/