Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Groovy no es java sin punto y coma v3

1,557 views

Published on

Nueva versión de la charla "Groovy Goodness: Porque groovy no es java sin puntos y comas".

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Groovy no es java sin punto y coma v3

  1. 1. Groovy Goodness PABLO ALBA CHAO #708090 Porque Groovy no es Java sin puntos y comas
  2. 2. Ego-slide Pablo Alba CTO en Kaleidos Open Source http://kaleidos.net/708090/ http://albaontech.wordpress.com @_pabloalba_
  3. 3. Episode I Corrían los 90...
  4. 4. Corrían los 90...
  5. 5. Corrían los 90...
  6. 6. Corrían los 90...
  7. 7. Corrían los 90...
  8. 8. 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(); }
  9. 9. 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 }
  10. 10. Episode II Groovy
  11. 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?
  12. 12. Groovy <<a flat learning curve for Java developers>> Guillaume Laforge
  13. 13. 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(); }
  14. 14. 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() }
  15. 15. Groovy File file = new File("file.txt")) String everything = file.text Groovy goodness...
  16. 16. Groovy URL url = "http://google.com ".toURL() print url.text Groovy goodness...
  17. 17. Groovy ● No quiero trollear a Java Disclaimer ● Java 8 ha dado un paso de gigante ● Pero Groovy mola más ;)
  18. 18. Groovy Hubert A. Klein Ikkink (MrHaki) http://www.mrhaki.com/ Groovy Goodness: El libro
  19. 19. Episode III Básicos y misceláneos de groovy
  20. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  32. 32. Básicos y misceláneos de groovy
  33. 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. 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. 35. Básicos y misceláneos de groovy Comparación de cadenas def a = "hola" assert "hola" == a
  36. 36. Básicos y misceláneos de groovy Return opcional String suma(int a, int b) { a + b } assert suma(2, 3) == 5
  37. 37. 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.20090 assert coordY == 12.90391
  38. 38. Básicos y misceláneos de groovy Listas (arrays) //JAVA String[] lista = new String[] { "uno", "dos", "tres" }; //GROOVY def lista = ['uno', 'dos', 'tres'] // En realidad son ArrayList lista.add(1000) assert 4 == lista.size()
  39. 39. 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"]
  40. 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. 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. 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. 43. Básicos y misceláneos de groovy Groovy como lenguaje de scripting println "Hola " + args[0] meDaIgualElNombre.groovy groovy meDaIgualElNombre.groovy Pablo
  44. 44. Episode IV Operadores
  45. 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. 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. 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
  48. 48. Operadores Multiplicación de String println '-' * 80 // ----------------------------------------------------------------------------
  49. 49. Episode IV Strings
  50. 50. Strings def s1 = 'Esto es una cadena, y podemos usar "comillas dobles" sin escaparlas’ Comillas simples
  51. 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. 52. Strings def s3 = /Podemos meter casi cualquier cosa en una "string" 'slasy' sin escaparla. Se usa mucho para expresiones regulares/ Slashy
  53. 53. Strings def s1 = "Esto es una cadena, y podemos usar ‘comillas simples’ sin escaparlas" Comillas dobles
  54. 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. 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
  56. 56. Strings '42.42'.isNumber() '42.42'.isDoble() '42.42'.isFloat() '42.42'.isInteger() '42.42'.isLong() ¿Es un número?
  57. 57. 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
  58. 58. Strings assert 'GROOVY' == 'groovy'.toUpperCase() assert 'groovy' == 'GROOVY'.toLowerCase() assert 'Groovy' == 'groovy'.capitalize() Mayúsculas y minúsculas
  59. 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
  60. 60. Episode V Closures
  61. 61. Closures def sumador = {a, b -> a + b } assert sumador (3, 4) == 7 assert sumador (‘H’, ‘ola’) == ‘Hola’ Closure
  62. 62. Closures def doblador = { it * 2} assert doblador (3) == 6 assert doblador (‘H’) == ‘HH’ "it"
  63. 63. 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
  64. 64. Closures def printer = System.out.&println printer "Hola" Métodos como closures
  65. 65. Episode VI Listas y mapas
  66. 66. 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 datos def patrulla = ['Cíclope', 'Lobezno', 'Tormenta', 'Coloso', 'Rondador']
  67. 67. 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 }
  68. 68. Listas y mapas def list = [2,5,1,9,3,4,2,8,9] assert list.size() == 9 assert list.sum() == 43 assert list.max() == 9 assert list.min() == 1 assert list.count(9) == 2 assert 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’
  69. 69. Listas y mapas class Persona{ String nombre int 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
  70. 70. Episode VII Ecosistema
  71. 71. Ecosistema
  72. 72. No es java sin punto y coma
  73. 73. ¡Gracias! ¡Gracias! http://kaleidos.net/708090/ http://albaontech.wordpress.com @_pabloalba_
  74. 74. ¿Desea saber más? http://greachconf.com/ Madrid, April 8th & 9th, 2016 http://www.meetup.com/madrid-gug/

×