Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
Groovy Goodness 
PABLO ALBA CHAO 
#708090 
Porque Groovy no es Java sin puntos y comas
Ego-slide 
Pablo Alba 
CTO en Kaleidos Open Source 
http://kaleidos.net/708090/ 
http://albaontech.wordpress.com 
@_pabloa...
Corrían los 90... 
Episode I
Corrían los 90...
Corrían los 90...
Corrían los 90...
Corrían los 90...
Corrían los 90... 
BufferedReader br = new BufferedReader( new FileReader(" file.txt")); 
try { 
StringBuilder sb = new St...
Corrían los 90... 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import ...
Groovy 
Episode II
Groovy 
¿Qué sabe mucha gente sobre 
Groovy? 
● Los archivos llevan extensión .groovy 
● No lleva punto y coma al final 
●...
Groovy 
<<a flat learning curve for Java 
developers>> 
Guillaume Laforge
Groovy 
BufferedReader br = new BufferedReader( new FileReader(" file.txt")); 
try { 
StringBuilder sb = new StringBuilder...
Groovy 
BufferedReader br = new BufferedReader(new FileReader(" file.txt")) 
try { 
StringBuilder sb = new StringBuilder()...
Groovy 
Groovy goodness... 
File file = new File("file.txt")) 
String everything = file.text
Groovy 
Groovy goodness... 
URL url = " http://google.com ".toURL() 
print url.text
Groovy 
Disclaimer 
● No quiero trollear a Java 
● Java 8 ha dado un paso de gigante 
● Pero Groovy mola más ;) 
● Espero ...
Groovy 
Groovy Goodness: El libro 
Hubert A. Klein Ikkink (MrHaki) 
http://www.mrhaki.com/
Básicos y misceláneos de groovy 
Episode III
Básicos y misceláneos de groovy 
public class Saludador { 
private String usuario; 
public String getUsuario() { 
return u...
Básicos y misceláneos de groovy 
public class Saludador { 
private String usuario 
public String getUsuario() { 
return us...
Básicos y misceláneos de groovy 
public class Saludador { 
private String usuario 
public String getUsuario() { 
return us...
Básicos y misceláneos de groovy 
public class Saludador { 
private String usuario 
public String getUsuario() { 
Public 
o...
Básicos y misceláneos de groovy 
class Saludador { 
private String usuario 
String getUsuario() { 
usuario 
} 
void setUsu...
Básicos y misceláneos de groovy 
class Saludador { 
private String usuario 
String getUsuario() { 
usuario 
} 
void setUsu...
Básicos y misceláneos de groovy 
Getters y 
setters 
opcionales 
class Saludador { 
private String usuario 
String getUsua...
Básicos y misceláneos de groovy 
class Saludador { 
private String usuario 
String saluda(String nombre){ 
"Hola " + nombr...
Básicos y misceláneos de groovy 
class Saludador { 
private String usuario 
Constructor por 
parámetros con 
nombre "mágic...
Básicos y misceláneos de groovy 
class Saludador { 
private String usuario 
Cadenas 
interpoladas 
(GStrings) 
String salu...
Básicos y misceláneos de groovy 
class Saludador { 
private String usuario 
String saluda(String nombre){ 
"Hola $nombre, ...
Básicos y misceláneos de groovy 
class Saludador { 
private String usuario 
String saluda(String nombre){ 
"Hola $nombre, ...
Básicos y misceláneos de groovy
Básicos y misceláneos de groovy 
Dinámico 
def saluda() { 
def a = "hola mundo" 
println a 
a = 3 
print a 
} 
void despid...
Básicos y misceláneos de groovy 
Estático. Si quieres. 
import groovy.transform.CompileStatic 
@CompileStatic 
void despid...
Básicos y misceláneos de groovy 
Comparación de cadenas 
def a = "hola" 
assert "hola" == a
Básicos y misceláneos de groovy 
Return opcional 
String suma(int a, int b) { 
a + b 
} 
assert suma(2, 3) == 5
Básicos y misceláneos de groovy 
Casting automático 
String diTuNombre() { 
Integer a = 3 
} 
def a = diTuNombre() 
assert...
Básicos y misceláneos de groovy 
Casting automático 
class User{ 
String nombre 
Integer edad 
} 
def user1 = new User(nom...
Básicos y misceláneos de groovy 
Método with 
class User{ 
String nombre 
Integer edad 
} 
def user = new User() 
user.wit...
Básicos y misceláneos de groovy 
Asignación múltiple / Retorno múltiple 
def iAmHere() { 
[29.20090, 12.90391] 
} 
def (co...
Básicos y misceláneos de groovy 
Listas (arrays) 
//JAVA 
String[] lista = new String[] { "uno", "dos", "tres" }; 
//GROOV...
Básicos y misceláneos de groovy 
Mapas 
//JAVA 
Map <String, String> mapa = new HashMap<String, String>(); 
mapa.put("nomb...
Básicos y misceláneos de groovy 
La verdad en Groovy 
assert !( null ) 
assert !( "" ) 
assert !( [] ) 
assert !( [:] ) 
a...
Básicos y misceláneos de groovy 
Groovy como lenguaje de scripting 
Hola.java 
class Hola { 
public static void main(Strin...
Básicos y misceláneos de groovy 
Groovy como lenguaje de scripting 
meDaIgualElNombre.groovy 
println "Hola " + args[0] 
g...
Básicos y misceláneos de groovy 
Hook de cerrado 
addShutdownHook { 
println 'Fin del script' 
} 
println 'Inicio del scri...
Operadores 
Episode IV
Operadores 
Navegación segura 
// Modo "JAVA" 
if (company != null && company.getAddress() != null 
&& company.getAddress(...
Operadores 
Operador Elvis 
def sampleText 
// Operador ternario normal 
def ternaryOutput = (sampleText != null) ? sample...
Operadores 
In 
// Modo "JAVA" 
String[] list = {"a", "b", "c"}; 
assert Arrays.asList(list).contains("a") 
// Modo "GROOV...
Operadores 
Multiplicación de String 
println '-' * 80 
// ---------------------------------------------------------------...
Strings 
Episode IV
Strings 
Comillas simples 
def s1 = 'Esto es una cadena, y podemos usar "comillas dobles"  
sin escaparlas’
Strings 
Comillas simples triples 
def s1 = ‘‘‘Esto es una cadena multilínea 
podemos escribir 
un montón de líneas 
sin p...
Strings 
Slashy 
def s3 = /Podemos meter casi cualquier cosa en una "string" 'slasy' sin  
escaparla. Se usa mucho para ex...
Strings 
Comillas dobles 
def s1 = "Esto es una cadena, y podemos usar ‘comillas simples’  
sin escaparlas"
Strings 
Comillas dobles triples 
def s1 = """Esto es una cadena multilínea 
podemos escribir 
un montón de líneas 
sin pr...
Strings 
GStrings 
def nombre = "Pablo" 
def s1 = "Hola, $nombre" 
assert s1 == "Hola, Pablo" 
def edad = 36 
def s2 = "Na...
Strings 
Invocación de métodos dinámica 
Adiós, Reflection! 
class Simple { 
def hola(nombre) { 
"Hola $nombre, ¿cómo está...
Strings 
¿Es un número? 
'42.42'.isNumber() 
'42.42'.isDoble() 
'42.42'.isFloat() 
'42.42'.isInteger() 
'42.42'.isLong()
Strings 
Substrings 
def s = 'Acceder a las cadenas en Groovy es fácil.' 
assert 'A' == s.getAt(0) 
// Las cadenas funcion...
Strings 
Mayúsculas y minúsculas 
assert 'GROOVY' == 'groovy'.toUpperCase() 
assert 'groovy' == 'GROOVY'.toLowerCase() 
as...
Strings 
Base64 
def s = 'Esto en otros lenguajes es un dolor...' 
String encoded = s.bytes.encodeBase64().toString() 
ass...
Closures 
Episode V
Closures 
Closure 
def sumador = {a, b -> a + b } 
assert sumador (3, 4) == 7 
assert sumador (‘H’, ‘ola’) == ‘Hola’
Closures 
"it" 
def doblador = { it * 2} 
assert doblador (3) == 6 
assert doblador (‘H’) == ‘HH’
Closures 
Valores por defecto 
def multiplicador = { int a, int b = 10 -> a * b} 
assert multiplicador (2, 3) == 6 
assert...
Closures 
Métodos como closures 
def logBase10 = Math.&log10 
assert logBase10(10) == 1 
def printer = System.out.&println...
Closures 
Curry (aplicación parcial) 
def restador = {a, b -> a - b } 
def invertir = restador.curry(0) 
assert invertir(4...
Closures 
Memoize 
def slow = {n -> 
Thread.sleep(1000) 
return n 
} 
slow (1) 
slow (1) 
slow (1) 
slow (1) 
slow (1) 
//...
Closures 
Memoize 
def slow = {n -> 
Thread.sleep(1000) 
return n 
} 
def mem = slow.memoize() 
mem (1) 
mem (1) 
mem (1) ...
Listas y mapas 
Episode VI
Listas y mapas 
Listas: Buscando datos 
def patrulla = ['Cíclope', 'Lobezno', 'Tormenta', 
'Coloso', 'Rondador'] 
assert '...
Listas y mapas 
Listas: Rangos 
def patrulla = ['Cíclope', 'Lobezno', 'Tormenta', 'Coloso', 'Rondador'] 
assert ['Cíclope'...
Listas y mapas 
Listas: Iteraciones 
def patrulla = ['Cíclope', 'Lobezno', 'Tormenta', 'Coloso', 'Rondador'] 
for (i = 0; ...
Listas y mapas 
Listas: Features ‘cool’ 
def list = [2,5,1,9,3,4,2,8,9] 
assert list.size() == 9 
assert list.sum() == 43 ...
Listas y mapas 
Listas: Filter / Map / Reduce 
class Persona{ 
String nombre 
int edad 
} 
def personas = [ 
new Persona(n...
Listas y mapas 
Mapas: Buscando datos 
def map = [nombre:"Logan", grupo: "Patrulla X"] 
def found = map.find { key, value ...
Listas y mapas 
Mapas: Features ‘cool’ 
def m1 = [user: 'palba', age: 36] 
def m2 = [user: 'palba', name: 'Pablo'] 
def m3...
Ecosistema 
Episode VII
Ecosistema
No es java sin punto y coma
¡Gracias! 
¡Gracias! 
http://kaleidos.net/708090/ 
http://albaontech.wordpress.com 
@_pabloalba_
¿Desea saber más? 
http://greachconf.com/ 
Madrid, April10th & 11th, 2015 
http://www.meetup.com/madrid-gug/
Prochain SlideShare
Chargement dans…5
×

Groovy no es java sin puntos y comas - Codemotion Madrid 2014

2 843 vues

Publié le

Charla de Codemotion Madrid 2014

Vídeo disponible en: https://www.youtube.com/watch?v=GqfYw0lcANw

Groovy es un lenguaje magnífico, muy divertido de programar, que hace que trabajar con la JVM sea un placer. A menudo se habla de que tiene una curva de aprendizaje casi nula desde Java. El problema es que esto lleva a que se desconozca gran parte de su potencial.

En esta charla quiero comentar a modo de "pildoras" algunos de los aspectos más interesantes de groovy. Para ello me basaré en mi propia experiencia, y en el magnífico libro "Groovy Goodness Notebook".

Publié dans : Logiciels
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (2019 Update) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://soo.gd/irt2 } ......................................................................................................................... Download Full EPUB Ebook here { https://soo.gd/irt2 } ......................................................................................................................... Download Full doc Ebook here { https://soo.gd/irt2 } ......................................................................................................................... Download PDF EBOOK here { https://soo.gd/irt2 } ......................................................................................................................... Download EPUB Ebook here { https://soo.gd/irt2 } ......................................................................................................................... Download doc Ebook here { https://soo.gd/irt2 } ......................................................................................................................... ......................................................................................................................... ................................................................................................................................... eBook is an electronic version of a traditional print book THIS can be read by using a personal computer or by using an eBook reader. (An eBook reader can be a software application for use on a computer such as Microsoft's free Reader application, or a book-sized computer THIS is used solely as a reading device such as Nuvomedia's Rocket eBook.) Users can purchase an eBook on diskette or CD, but the most popular method of getting an eBook is to purchase a downloadable file of the eBook (or other reading material) from a Web site (such as Barnes and Noble) to be read from the user's computer or reading device. Generally, an eBook can be downloaded in five minutes or less ......................................................................................................................... .............. Browse by Genre Available eBooks .............................................................................................................................. Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, ......................................................................................................................... ......................................................................................................................... .....BEST SELLER FOR EBOOK RECOMMEND............................................................. ......................................................................................................................... Blowout: Corrupted Democracy, Rogue State Russia, and the Richest, Most Destructive Industry on Earth,-- The Ride of a Lifetime: Lessons Learned from 15 Years as CEO of the Walt Disney Company,-- Call Sign Chaos: Learning to Lead,-- StrengthsFinder 2.0,-- Stillness Is the Key,-- She Said: Breaking the Sexual Harassment Story THIS Helped Ignite a Movement,-- Atomic Habits: An Easy &amp; Proven Way to Build Good Habits &amp; Break Bad Ones,-- Everything Is Figureoutable,-- What It Takes: Lessons in the Pursuit of Excellence,-- Rich Dad Poor Dad: What the Rich Teach Their Kids About Money THIS the Poor and Middle Class Do Not!,-- The Total Money Makeover: Classic Edition: A Proven Plan for Financial Fitness,-- Shut Up and Listen!: Hard Business Truths THIS Will Help You Succeed, ......................................................................................................................... .........................................................................................................................
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (2019 Update) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://soo.gd/irt2 } ......................................................................................................................... Download Full EPUB Ebook here { https://soo.gd/irt2 } ......................................................................................................................... Download Full doc Ebook here { https://soo.gd/irt2 } ......................................................................................................................... Download PDF EBOOK here { https://soo.gd/irt2 } ......................................................................................................................... Download EPUB Ebook here { https://soo.gd/irt2 } ......................................................................................................................... Download doc Ebook here { https://soo.gd/irt2 } ......................................................................................................................... ......................................................................................................................... ................................................................................................................................... eBook is an electronic version of a traditional print book THIS can be read by using a personal computer or by using an eBook reader. (An eBook reader can be a software application for use on a computer such as Microsoft's free Reader application, or a book-sized computer THIS is used solely as a reading device such as Nuvomedia's Rocket eBook.) Users can purchase an eBook on diskette or CD, but the most popular method of getting an eBook is to purchase a downloadable file of the eBook (or other reading material) from a Web site (such as Barnes and Noble) to be read from the user's computer or reading device. Generally, an eBook can be downloaded in five minutes or less ......................................................................................................................... .............. Browse by Genre Available eBooks .............................................................................................................................. Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, ......................................................................................................................... ......................................................................................................................... .....BEST SELLER FOR EBOOK RECOMMEND............................................................. ......................................................................................................................... Blowout: Corrupted Democracy, Rogue State Russia, and the Richest, Most Destructive Industry on Earth,-- The Ride of a Lifetime: Lessons Learned from 15 Years as CEO of the Walt Disney Company,-- Call Sign Chaos: Learning to Lead,-- StrengthsFinder 2.0,-- Stillness Is the Key,-- She Said: Breaking the Sexual Harassment Story THIS Helped Ignite a Movement,-- Atomic Habits: An Easy &amp; Proven Way to Build Good Habits &amp; Break Bad Ones,-- Everything Is Figureoutable,-- What It Takes: Lessons in the Pursuit of Excellence,-- Rich Dad Poor Dad: What the Rich Teach Their Kids About Money THIS the Poor and Middle Class Do Not!,-- The Total Money Makeover: Classic Edition: A Proven Plan for Financial Fitness,-- Shut Up and Listen!: Hard Business Truths THIS Will Help You Succeed, ......................................................................................................................... .........................................................................................................................
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
  • DOWNLOAD THAT BOOKS INTO AVAILABLE FORMAT (2019 Update) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ......................................................................................................................... ................................................................................................................................... eBook is an electronic version of a traditional print book that can be read by using a personal computer or by using an eBook reader. (An eBook reader can be a software application for use on a computer such as Microsoft's free Reader application, or a book-sized computer that is used solely as a reading device such as Nuvomedia's Rocket eBook.) Users can purchase an eBook on diskette or CD, but the most popular method of getting an eBook is to purchase a downloadable file of the eBook (or other reading material) from a Web site (such as Barnes and Noble) to be read from the user's computer or reading device. Generally, an eBook can be downloaded in five minutes or less ......................................................................................................................... .............. Browse by Genre Available eBooks .............................................................................................................................. Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, ......................................................................................................................... ......................................................................................................................... .....BEST SELLER FOR EBOOK RECOMMEND............................................................. ......................................................................................................................... Blowout: Corrupted Democracy, Rogue State Russia, and the Richest, Most Destructive Industry on Earth,-- The Ride of a Lifetime: Lessons Learned from 15 Years as CEO of the Walt Disney Company,-- Call Sign Chaos: Learning to Lead,-- StrengthsFinder 2.0,-- Stillness Is the Key,-- She Said: Breaking the Sexual Harassment Story That Helped Ignite a Movement,-- Atomic Habits: An Easy &amp; Proven Way to Build Good Habits &amp; Break Bad Ones,-- Everything Is Figureoutable,-- What It Takes: Lessons in the Pursuit of Excellence,-- Rich Dad Poor Dad: What the Rich Teach Their Kids About Money That the Poor and Middle Class Do Not!,-- The Total Money Makeover: Classic Edition: A Proven Plan for Financial Fitness,-- Shut Up and Listen!: Hard Business Truths that Will Help You Succeed, ......................................................................................................................... .........................................................................................................................
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
  • DOWNLOAD THAT BOOKS INTO AVAILABLE FORMAT (2019 Update) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ......................................................................................................................... ................................................................................................................................... eBook is an electronic version of a traditional print book that can be read by using a personal computer or by using an eBook reader. (An eBook reader can be a software application for use on a computer such as Microsoft's free Reader application, or a book-sized computer that is used solely as a reading device such as Nuvomedia's Rocket eBook.) Users can purchase an eBook on diskette or CD, but the most popular method of getting an eBook is to purchase a downloadable file of the eBook (or other reading material) from a Web site (such as Barnes and Noble) to be read from the user's computer or reading device. Generally, an eBook can be downloaded in five minutes or less ......................................................................................................................... .............. Browse by Genre Available eBooks .............................................................................................................................. Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, ......................................................................................................................... ......................................................................................................................... .....BEST SELLER FOR EBOOK RECOMMEND............................................................. ......................................................................................................................... Blowout: Corrupted Democracy, Rogue State Russia, and the Richest, Most Destructive Industry on Earth,-- The Ride of a Lifetime: Lessons Learned from 15 Years as CEO of the Walt Disney Company,-- Call Sign Chaos: Learning to Lead,-- StrengthsFinder 2.0,-- Stillness Is the Key,-- She Said: Breaking the Sexual Harassment Story That Helped Ignite a Movement,-- Atomic Habits: An Easy &amp; Proven Way to Build Good Habits &amp; Break Bad Ones,-- Everything Is Figureoutable,-- What It Takes: Lessons in the Pursuit of Excellence,-- Rich Dad Poor Dad: What the Rich Teach Their Kids About Money That the Poor and Middle Class Do Not!,-- The Total Money Makeover: Classic Edition: A Proven Plan for Financial Fitness,-- Shut Up and Listen!: Hard Business Truths that Will Help You Succeed, ......................................................................................................................... .........................................................................................................................
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
  • DOWNLOAD THAT BOOKS INTO AVAILABLE FORMAT (2019 Update) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ......................................................................................................................... ................................................................................................................................... eBook is an electronic version of a traditional print book that can be read by using a personal computer or by using an eBook reader. (An eBook reader can be a software application for use on a computer such as Microsoft's free Reader application, or a book-sized computer that is used solely as a reading device such as Nuvomedia's Rocket eBook.) Users can purchase an eBook on diskette or CD, but the most popular method of getting an eBook is to purchase a downloadable file of the eBook (or other reading material) from a Web site (such as Barnes and Noble) to be read from the user's computer or reading device. Generally, an eBook can be downloaded in five minutes or less ......................................................................................................................... .............. Browse by Genre Available eBooks .............................................................................................................................. Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, ......................................................................................................................... ......................................................................................................................... .....BEST SELLER FOR EBOOK RECOMMEND............................................................. ......................................................................................................................... Blowout: Corrupted Democracy, Rogue State Russia, and the Richest, Most Destructive Industry on Earth,-- The Ride of a Lifetime: Lessons Learned from 15 Years as CEO of the Walt Disney Company,-- Call Sign Chaos: Learning to Lead,-- StrengthsFinder 2.0,-- Stillness Is the Key,-- She Said: Breaking the Sexual Harassment Story That Helped Ignite a Movement,-- Atomic Habits: An Easy &amp; Proven Way to Build Good Habits &amp; Break Bad Ones,-- Everything Is Figureoutable,-- What It Takes: Lessons in the Pursuit of Excellence,-- Rich Dad Poor Dad: What the Rich Teach Their Kids About Money That the Poor and Middle Class Do Not!,-- The Total Money Makeover: Classic Edition: A Proven Plan for Financial Fitness,-- Shut Up and Listen!: Hard Business Truths that Will Help You Succeed, ......................................................................................................................... .........................................................................................................................
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici

Groovy no es java sin puntos y comas - Codemotion Madrid 2014

  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. Corrían los 90... Episode I
  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. Groovy Episode II
  11. 11. Groovy ¿Qué sabe mucha gente sobre Groovy? ● Los archivos llevan extensión .groovy ● No lleva punto y coma al final ● Es casi al 100% compatible con código java
  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 Groovy goodness... File file = new File("file.txt")) String everything = file.text
  16. 16. Groovy Groovy goodness... URL url = " http://google.com ".toURL() print url.text
  17. 17. Groovy Disclaimer ● No quiero trollear a Java ● Java 8 ha dado un paso de gigante ● Pero Groovy mola más ;) ● Espero que todo el mundo aprenda algo
  18. 18. Groovy Groovy Goodness: El libro Hubert A. Klein Ikkink (MrHaki) http://www.mrhaki.com/
  19. 19. Básicos y misceláneos de groovy Episode III
  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 Returns opcionales } public String saluda(String nombre){ return "Hola " + nombre + ", yo soy " + usuario } } Saludador saludador = new Saludador() saludador.setUsuario "Pablo" System.out.println saludador.saluda("Guillaume")
  23. 23. Básicos y misceláneos de groovy public class Saludador { private String usuario public String getUsuario() { Public opcionales 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")
  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 } Tipos opcionales } Saludador saludador = new Saludador() saludador.setUsuario "Pablo" System.out.println saludador.saluda("Guillaume")
  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 Atajo Saludador() para print saludador.setUsuario "Pablo" System.out.println saludador.saluda("Guillaume")
  26. 26. Básicos y misceláneos de groovy Getters y setters opcionales 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")
  27. 27. Básicos y misceláneos de groovy class Saludador { private String usuario String saluda(String nombre){ "Hola " + nombre + ", yo soy " + usuario } Invocación al setter "mágica" } def saludador = new Saludador() saludador.setUsuario "Pablo" println saludador.saluda("Guillaume")
  28. 28. Básicos y misceláneos de groovy class Saludador { private String usuario Constructor por parámetros con nombre "mágico" String saluda(String nombre){ "Hola " + nombre + ", yo soy " + usuario } } def saludador = new Saludador() saludador.usuario = "Pablo" println saludador.saluda("Guillaume")
  29. 29. Básicos y misceláneos de groovy class Saludador { private String usuario Cadenas interpoladas (GStrings) String saluda(String nombre){ "Hola " + nombre + ", yo soy " + usuario } } def saludador = new Saludador(usuario:"Pablo") println saludador.saluda("Guillaume")
  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 soy } } Saludador saludador = new Saludador(); saludador.setUsuario("Pablo"); System.out.println(saludador.saluda("Guillaume"));
  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 Casting automático String diTuNombre() { Integer a = 3 } def a = diTuNombre() assert a == "3" assert a.class == String
  38. 38. Básicos y misceláneos de groovy Casting automático class User{ String nombre Integer edad } def user1 = new User(nombre:"Pablo", edad:36) assert user1.class == User def user2 = [nombre:"Pablo", edad:36] as User assert user2.class == User User user3 = [nombre:"Pablo", edad:36] assert user3.class == User
  39. 39. Básicos y misceláneos de groovy Método with class User{ String nombre Integer edad } def user = new User() user.with { nombre = "Pablo" edad = 36 } def sb = new StringBuilder() sb.with { append 'Just another way to add ' append 'strings to the StringBuilder ’ append 'object.' }
  40. 40. 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
  41. 41. Básicos y misceláneos de groovy Listas (arrays) //JAVA String[] lista = new String[] { "uno", "dos", "tres" }; //GROOVY def lista = ['uno', 'dos', 'tres'] // Las listas tienen length, igual que los arrays assert 3 == lista.length // Además tienen size assert 3 == lista.size()
  42. 42. 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"]
  43. 43. 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
  44. 44. Básicos y misceláneos de groovy Groovy como lenguaje de scripting Hola.java class Hola { public static void main(String[] args){ System.out.println ("Hola " + args[0]); } } javac Hola.java java Hola Pablo
  45. 45. Básicos y misceláneos de groovy Groovy como lenguaje de scripting meDaIgualElNombre.groovy println "Hola " + args[0] groovy meDaIgualElNombre.groovy
  46. 46. Básicos y misceláneos de groovy Hook de cerrado addShutdownHook { println 'Fin del script' } println 'Inicio del script' Thread.sleep 100000
  47. 47. Operadores Episode IV
  48. 48. 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
  49. 49. Operadores Operador Elvis def sampleText // Operador ternario normal def ternaryOutput = (sampleText != null) ? sampleText : 'Hello Groovy!' // Operador Elvis // Esto se lee: 'Si sampleText no es nulo, asigna sampleText a // elvisOutput. De otra forma, asigna 'Viva Las Vegas!' a elvisOutput. def elvisOutput = sampleText ?: 'Viva Las Vegas!'
  50. 50. 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
  51. 51. Operadores Multiplicación de String println '-' * 80 // ----------------------------------------------------------------------------
  52. 52. Strings Episode IV
  53. 53. Strings Comillas simples def s1 = 'Esto es una cadena, y podemos usar "comillas dobles" sin escaparlas’
  54. 54. Strings Comillas simples triples 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 ’’’
  55. 55. Strings Slashy def s3 = /Podemos meter casi cualquier cosa en una "string" 'slasy' sin escaparla. Se usa mucho para expresiones regulares/
  56. 56. Strings Comillas dobles def s1 = "Esto es una cadena, y podemos usar ‘comillas simples’ sin escaparlas"
  57. 57. Strings Comillas dobles triples 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 """
  58. 58. Strings GStrings def nombre = "Pablo" def s1 = "Hola, $nombre" assert s1 == "Hola, Pablo" def edad = 36 def s2 = "Naciste en el año ${2014 - edad}" assert s2 == "Naciste en el año 1978"
  59. 59. Strings Invocación de métodos dinámica Adiós, Reflection! class Simple { def hola(nombre) { "Hola $nombre, ¿cómo estás?" } } def s = new Simple() def method = 'hola' assert 'Hola Pablo, ¿cómo estás?' == s."$method"('Pablo')
  60. 60. Strings ¿Es un número? '42.42'.isNumber() '42.42'.isDoble() '42.42'.isFloat() '42.42'.isInteger() '42.42'.isLong()
  61. 61. Strings Substrings 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.
  62. 62. Strings Mayúsculas y minúsculas assert 'GROOVY' == 'groovy'.toUpperCase() assert 'groovy' == 'GROOVY'.toLowerCase() assert 'Groovy' == 'groovy'.capitalize()
  63. 63. Strings Base64 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)
  64. 64. Closures Episode V
  65. 65. Closures Closure def sumador = {a, b -> a + b } assert sumador (3, 4) == 7 assert sumador (‘H’, ‘ola’) == ‘Hola’
  66. 66. Closures "it" def doblador = { it * 2} assert doblador (3) == 6 assert doblador (‘H’) == ‘HH’
  67. 67. Closures Valores por defecto def multiplicador = { int a, int b = 10 -> a * b} assert multiplicador (2, 3) == 6 assert multiplicador (5) == 50 //MissingMethodException //multiplicador (‘a’)
  68. 68. Closures Métodos como closures def logBase10 = Math.&log10 assert logBase10(10) == 1 def printer = System.out.&println printer "Hola"
  69. 69. Closures Curry (aplicación parcial) def restador = {a, b -> a - b } def invertir = restador.curry(0) assert invertir(4) == -4 def restaUno = restador.rcurry(1) assert restaUno(4) == 3
  70. 70. Closures Memoize def slow = {n -> Thread.sleep(1000) return n } slow (1) slow (1) slow (1) slow (1) slow (1) // 5.894s
  71. 71. Closures Memoize def slow = {n -> Thread.sleep(1000) return n } def mem = slow.memoize() mem (1) mem (1) mem (1) mem (1) mem (1) // 1.922s
  72. 72. Listas y mapas Episode VI
  73. 73. Listas y mapas Listas: Buscando datos def patrulla = ['Cíclope', 'Lobezno', 'Tormenta', 'Coloso', 'Rondador'] assert 'Lobezno' == list.find { it == 'Lobezno' } assert ['Tormenta', 'Rondador'] == list.findAll { it.size() > 7 } assert 2 == list.findLastIndexOf { it.size() == 7 }
  74. 74. Listas y mapas Listas: Rangos def patrulla = ['Cíclope', 'Lobezno', 'Tormenta', 'Coloso', 'Rondador'] assert ['Cíclope', 'Lobezno'] == patrulla[0..1] assert ['Tormenta', 'Lobezno'] == patrulla[2..1] assert ['Tormenta', 'Coloso', 'Rondador'] == patrulla[2..-1]
  75. 75. Listas y mapas Listas: Iteraciones def patrulla = ['Cíclope', 'Lobezno', 'Tormenta', 'Coloso', 'Rondador'] for (i = 0; i < 5; i++) { println patrulla[i] } 5.times{ println patrulla[it] } patrulla.each{ println it }
  76. 76. Listas y mapas Listas: Features ‘cool’ 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]
  77. 77. Listas y mapas Listas: Filter / Map / Reduce 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: 9) ] def nombres = personas.findAll { it.edad < 18 } .collect { it.nombre.toUpperCase() } .join(', ') assert nombres == "LUCÍA, ISABEL"
  78. 78. Listas y mapas Mapas: Buscando datos def map = [nombre:"Logan", grupo: "Patrulla X"] def found = map.find { key, value -> key == 'nombre' } assert found.key == 'nombre' assert found.value == 'Logan' found = map.find { it.value =~ /tru/ } assert found.key == 'grupo' found.value == 'Patrulla X'
  79. 79. Listas y mapas Mapas: Features ‘cool’ def m1 = [user: 'palba', age: 36] def m2 = [user: 'palba', name: 'Pablo'] def m3 = [user: 'carlos', age: 36] assert m1 - m2 == [age: 36] assert m1 - m3 == [user: 'palba'] def money = [euro: 166.386, centimo: 1.664, peseta: 1] assert money.min { it.value }.value == 1 assert money.max { it.value }.key == ‘euro’
  80. 80. Ecosistema Episode VII
  81. 81. Ecosistema
  82. 82. No es java sin punto y coma
  83. 83. ¡Gracias! ¡Gracias! http://kaleidos.net/708090/ http://albaontech.wordpress.com @_pabloalba_
  84. 84. ¿Desea saber más? http://greachconf.com/ Madrid, April10th & 11th, 2015 http://www.meetup.com/madrid-gug/

×