11. 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?
20. 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
21. 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
22. 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
23. 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
24. 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
25. 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
26. 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
27. 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"
28. 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"
29. 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)
30. 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...
31. 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 s
}
}
Saludador saludador = new Saludador();
saludador.setUsuario("Pablo");
System.out.println(saludador.saluda("Guillau
33. 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 = 3
println a
a = "adios" // Error en tiempo de ejecución
println a
}
34. Básicos y misceláneos de groovy
Estático. Si quieres.
import groovy.transform.CompileStatic
@CompileStatic
void despidete() {
Integer a = 3
println a
a = "adios" //Error en tiempo de compilación
println a
}
35. Básicos y misceláneos de groovy
Comparación de cadenas
def a = "hola"
assert "hola" == a
36. Básicos y misceláneos de groovy
Return opcional
String suma(int a, int b) {
a + b
}
assert suma(2, 3) == 5
40. Básicos y misceláneos de groovy
Mapas
//JAVA
Map <String, String> mapa = new HashMap<String, String>();
mapa.put("nombre", "Pablo");
mapa.put("apellido", "Alba");
//GROOVY
def mapa = [nombre:"Pablo", apellido:"Alba"]
41. 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
42. 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
43. Básicos y misceláneos de groovy
Groovy como lenguaje de scripting
println "Hola " + args[0]
meDaIgualElNombre.groovy
groovy meDaIgualElNombre.groovy Pablo
45. 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
46. Operadores
Operador Elvis
def text
// Operador ternario normal
def 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!'
47. 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
50. Strings
def s1 = 'Esto es una cadena, y podemos usar "comillas dobles"
sin escaparlas’
Comillas simples
51. Strings
def s1 = ‘‘‘Esto es una cadena multilínea
podemos escribir
un montón de líneas
sin preocuparnos de todo
el lío de la concatenación
’’’
Comillas simples triples
52. Strings
def s3 = /Podemos meter casi cualquier cosa en una "string" 'slasy' sin
escaparla. Se usa mucho para expresiones regulares/
Slashy
53. Strings
def s1 = "Esto es una cadena, y podemos usar ‘comillas simples’
sin escaparlas"
Comillas dobles
54. Strings
def s1 = """Esto es una cadena multilínea
podemos escribir
un montón de líneas
sin preocuparnos de todo
el lío de la concatenación
"""
Comillas dobles triples
55. 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
59. 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