Your SlideShare is downloading. ×
0
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Introducción a Groovy
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Introducción a Groovy

1,418

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,418
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
43
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • Java - Boiler Plate Code  (Sintaxis mas relajada) + Dynamic Typing (Duck typing) Optional typing Optional Compilation Meta-object Protoco + Closures (De verdad) Groovy Closures Como una funcion anonima. Pero usada en el ambito en el que se encuentra. + DSL + Builders + Metaprograming + GDK
  • Transcript

    • 1. Introducción a http://twitter.com/highwayman [email_address] http://linkd.in/davidsantamaria por David Santamaria
    • 2. Agenda <ul><ul><li>¿Que es Groovy? </li></ul></ul><ul><ul><li>¿Por que Groovy? </li></ul></ul><ul><ul><li>Goodies. </li></ul></ul><ul><ul><li>Mejoras respecto a Java. </li></ul></ul><ul><ul><li>Comenzamos. </li></ul></ul><ul><ul><li>Lenguaje Basicos. </li></ul></ul>
    • 3. ¿Qué es Groovy? <ul><li>Groovy es un lenguaje Dinamico para la JVM que permite el uso de caracteristicas de otros lenguajes como Ruby para la comunidad Java. </li></ul><ul><li>http://groovy.codehaus.org/ </li></ul>
    • 4. ¿Qué mas es Groovy? <ul><li>Groovy también es ... </li></ul><ul><li>agil, dinamico, compacto, sin curva de aprendizaje, con DSL, soporte de scripts, Totalmente OO, Integrado con Java (Sintaxis Java y Produce Bytecode). </li></ul>
    • 5. ¿Qué es Groovy? (para los developers) <ul><li>Groovy es un &quot;superset&quot; de Java. </li></ul><ul><li>Groovy = Java - Boiler Plate Code </li></ul><ul><li>                + Dynamic Typing </li></ul><ul><li>                + Closures </li></ul><ul><li>                + DSL </li></ul><ul><li>                + Builders </li></ul><ul><li>                + Metaprograming </li></ul><ul><li>                + GDK </li></ul><ul><li>                - Errores de compilacion </li></ul><ul><li>                - Ligeramente mas lento </li></ul>
    • 6. ¿Por que Groovy? <ul><ul><li>Java Platform! </li></ul></ul><ul><ul><ul><li>Se ejecuta en la JVM (si hay una JVM puedes ejecutar Groovy). </li></ul></ul></ul><ul><ul><ul><li>Usa librerias Java. </li></ul></ul></ul><ul><ul><ul><li>Embebida en Aplicaciones de Escritorio Java. </li></ul></ul></ul><ul><ul><ul><li>Embebida en aplicaciones J2EE </li></ul></ul></ul><ul><ul><ul><li>Test con JUnit </li></ul></ul></ul><ul><ul><ul><li>Debug con Eclipse, IntelliJ, Netbeans. </li></ul></ul></ul><ul><ul><ul><li>Code Coverage con Cobertura. </li></ul></ul></ul><ul><ul><li>No requiere aprender nuevas APIS (Jython, JRuby,...) </li></ul></ul><ul><ul><li>Rhino es interesante pero es JavaScript :) </li></ul></ul>
    • 7. Goodies <ul><ul><li>Tipado Dinamico y estatico. </li></ul></ul><ul><ul><li>Totalmente orientado a objetos. (Todo es un Objeto) </li></ul></ul><ul><ul><li>Closures. </li></ul></ul><ul><ul><li>Sobrecarga de operadores. </li></ul></ul><ul><ul><li>Multimethods. </li></ul></ul><ul><ul><li>Declaracion Literal de Listas (Arrays), maps, ranges, y expresiones regulares. (Soporte Nativo!) </li></ul></ul><ul><ul><li>Metaprogramación. </li></ul></ul><ul><ul><li>Y Mas... </li></ul></ul><ul><ul><ul><li>GPath. </li></ul></ul></ul><ul><ul><ul><li>Builders. </li></ul></ul></ul><ul><ul><ul><li>Groovy Beans. </li></ul></ul></ul>
    • 8. HelloWorld.java <ul><li>public class HelloWorld { </li></ul><ul><li>public static void main(String[] args){ </li></ul><ul><li>HelloWorld hw = new HelloWorld(); </li></ul><ul><li>hw.setNombre(&quot; Groovy &quot;); </li></ul><ul><li>System. out .println(hw.saluda()); </li></ul><ul><li>} </li></ul><ul><li>String nombre ; </li></ul><ul><li>public String getNombre() {   return nombre ;  } </li></ul><ul><li>public void setNombre(String nombre) {   </li></ul><ul><li>             this . nombre = nombre;  </li></ul><ul><li>         } </li></ul><ul><li>public String saluda(){  return &quot;Hola &quot; + nombre ;} </li></ul><ul><li>} </li></ul>
    • 9. HelloWorld.groovy <ul><li>public class HelloWorld { </li></ul><ul><li>public static void main(String[] args){ </li></ul><ul><li>HelloWorld hw = new HelloWorld(); </li></ul><ul><li>hw.setNombre(&quot; Groovy &quot;); </li></ul><ul><li>System. out .println(hw.saluda()); </li></ul><ul><li>} </li></ul><ul><li>String nombre ; </li></ul><ul><li>public String getNombre() {   return nombre ;  } </li></ul><ul><li>public void setNombre(String nombre) {   </li></ul><ul><li>             this . nombre = nombre;  </li></ul><ul><li>         } </li></ul><ul><li>public String saluda(){  return &quot;Hola &quot; + nombre ;} </li></ul><ul><li>} </li></ul>
    • 10. HelloWorld.groovy <ul><li>public class HelloWorld { </li></ul><ul><li>public static void main(String[] args){ </li></ul><ul><li>HelloWorld hw = new HelloWorld() </li></ul><ul><li>hw.setNombre(&quot; Groovy &quot;) </li></ul><ul><li>System. out .println(hw.saluda()) </li></ul><ul><li>} </li></ul><ul><li>String nombre ; </li></ul><ul><li>public String getNombre() {   return nombre  } </li></ul><ul><li>public void setNombre(String nombre) {   </li></ul><ul><li>             this . nombre = nombre </li></ul><ul><li>         } </li></ul><ul><li>public String saluda(){  return &quot;Hola &quot; + nombre } </li></ul><ul><li>} </li></ul>; opcionales!
    • 11. HelloWorld.groovy <ul><li>class HelloWorld { </li></ul><ul><li>static void main(String[] args){ </li></ul><ul><li>HelloWorld hw = new HelloWorld() </li></ul><ul><li>hw.setNombre(&quot; Groovy &quot;) </li></ul><ul><li>System. out .println(hw.saluda()) </li></ul><ul><li>} </li></ul><ul><li>String nombre ; </li></ul><ul><li>String getNombre() {   return nombre  } </li></ul><ul><li>void setNombre(String nombre) {   </li></ul><ul><li>             this . nombre = nombre </li></ul><ul><li>         } </li></ul><ul><li>String saluda(){  return &quot;Hola &quot; + nombre } </li></ul><ul><li>} </li></ul>public por defecto!
    • 12. HelloWorld.groovy <ul><li>class HelloWorld { </li></ul><ul><li>static void main(String[] args){ </li></ul><ul><li>HelloWorld hw = new HelloWorld() </li></ul><ul><li>hw.nombre(&quot; Groovy &quot;) </li></ul><ul><li>System. out .println(hw.saluda()) </li></ul><ul><li>} </li></ul><ul><li>String nombre ; </li></ul><ul><li>String saluda(){  return &quot;Hola &quot; + nombre } </li></ul><ul><li>} </li></ul>getters and setters autogenerados!
    • 13. HelloWorld.groovy <ul><li>class HelloWorld { </li></ul><ul><li>static void main(String[] args){ </li></ul><ul><li>HelloWorld hw = new HelloWorld() </li></ul><ul><li>hw.nombre(&quot; Groovy &quot;) </li></ul><ul><li>System. out .println(hw.saluda()) </li></ul><ul><li>} </li></ul><ul><li>String nombre ; </li></ul><ul><li>String saluda(){ &quot;Hola &quot; + nombre } </li></ul><ul><li>} </li></ul>return opcional!
    • 14. HelloWorld.groovy <ul><li>class HelloWorld { </li></ul><ul><li>static void main(String[] args){ </li></ul><ul><li>HelloWorld hw = new HelloWorld() </li></ul><ul><li>hw.nombre(&quot; Groovy &quot;) </li></ul><ul><li>System. out .println(hw.saluda()) </li></ul><ul><li>} </li></ul><ul><li>def   nombre ; </li></ul><ul><li>def saluda(){ &quot;Hola &quot; + nombre } </li></ul><ul><li>} </li></ul>Tipado Dinamico!
    • 15. HelloWorld.groovy <ul><li>class HelloWorld { </li></ul><ul><li>static void main(String[] args){ </li></ul><ul><li>HelloWorld hw = new HelloWorld() </li></ul><ul><li>hw.nombre(&quot; Groovy &quot;) </li></ul><ul><li>println (hw.saluda()) </li></ul><ul><li>} </li></ul><ul><li>def  nombre ; </li></ul><ul><li>def saluda(){ &quot;Hola &quot; + nombre } </li></ul><ul><li>} </li></ul><ul><li>Incluido por defecto: </li></ul><ul><ul><li>java.io.* </li></ul></ul><ul><ul><li>java.lang.* </li></ul></ul><ul><ul><li>java.math.BigDecimal </li></ul></ul><ul><ul><li>java.math.BigInteger </li></ul></ul><ul><ul><li>java.net.* </li></ul></ul><ul><ul><li>java.util.* </li></ul></ul><ul><ul><li>groovy.lang.* </li></ul></ul><ul><ul><li>groovy.util.* </li></ul></ul>
    • 16. HelloWorld.groovy <ul><li>class HelloWorld { </li></ul><ul><li>static void main(String[] args){ </li></ul><ul><li>HelloWorld hw = new HelloWorld() </li></ul><ul><li>hw.nombre(&quot; Groovy &quot;) </li></ul><ul><li>println(hw.saluda()) </li></ul><ul><li>} </li></ul><ul><li>def  nombre </li></ul><ul><li>def saluda(){  &quot;Hola ${nombre}&quot; } </li></ul><ul><li>} </li></ul>GStrings!
    • 17. HelloWorld.groovy <ul><li>HelloWorld hw = new HelloWorld() </li></ul><ul><li>hw.nombre(&quot; Groovy &quot;) </li></ul><ul><li>println(hw.saluda()) </li></ul><ul><li>class  HelloWorld { </li></ul><ul><li>def  nombre </li></ul><ul><li>def saluda(){ &quot;Hola ${nombre} &quot; } </li></ul><ul><li>} </li></ul>Declaracion de clases opcional para Scripts!
    • 18. HelloWorld.groovy <ul><li>HelloWorld hw = new HelloWorld() </li></ul><ul><li>hw.nombre &quot; Groovy &quot; </li></ul><ul><li>println hw.saluda() </li></ul><ul><li>class  HelloWorld { </li></ul><ul><li>def  nombre </li></ul><ul><li>def saluda(){ &quot;Hola ${nombre} &quot; } </li></ul><ul><li>} </li></ul>Parentesis opcionales en la mayoria de casos.
    • 19. HelloWorld.java <ul><li>public class HelloWorld { </li></ul><ul><li>public static void main(String[] args){ </li></ul><ul><li>HelloWorld hw = new HelloWorld(); </li></ul><ul><li>hw.setNombre(&quot; Groovy &quot;); </li></ul><ul><li>System. out .println(hw.saluda()); </li></ul><ul><li>} </li></ul><ul><li>String nombre ; </li></ul><ul><li>public String getNombre() {   return nombre ;  } </li></ul><ul><li>public void setNombre(String nombre) {   </li></ul><ul><li>             this . nombre = nombre;  </li></ul><ul><li>         } </li></ul><ul><li>public String saluda(){  return &quot;Hola &quot; + nombre ;} </li></ul><ul><li>} </li></ul>
    • 20. HelloWorld.groovy <ul><li>HelloWorld hw =  new  HelloWorld() </li></ul><ul><li>hw.nombre &quot; Groovy &quot; </li></ul><ul><li>println hw.saluda() </li></ul><ul><li>class  HelloWorld { </li></ul><ul><li>def  nombre </li></ul><ul><li>def saluda(){ &quot;Hola ${nombre} &quot;  } </li></ul><ul><li>} </li></ul>
    • 21. Comenzamos! <ul><ul><li>Descargamos la ultima version de Groovy </li></ul></ul><ul><li>http://groovy.codehaus.org/ </li></ul><ul><ul><li>Descomprimimos en un directorio. </li></ul></ul><ul><ul><li>Añadimos la variable de entorno GROOVY_HOME . </li></ul></ul><ul><li>Y %GROOVY_HOME%/bin a la variable PATH . </li></ul><ul><ul><li>Escribimos groovy -version </li></ul></ul>
    • 22. Comenzamos! (II) <ul><li>groovyconsole </li></ul><ul><li>println &quot;Hola Mundo!&quot; </li></ul><ul><li>Ctrl + R </li></ul>
    • 23. Lenguaje: Strings and GStrings. <ul><ul><li>Comillas Simples para Strings . </li></ul></ul><ul><ul><li>Comillas dobles para GStrings : Son como Strings pero soportan expresiones: ${expression}. </li></ul></ul><ul><ul><li>Strings multi-linea . </li></ul></ul>
    • 24. Lenguaje: Strings and GStrings. <ul><ul><li>Slashy Strings : Como GStrings  con soporte para Expresiones Regulares. </li></ul></ul><ul><ul><li>- Muchas mas operaciones... </li></ul></ul>http://groovy.codehaus.org/Strings+and+GString http://groovy.codehaus.org/JN1525-Strings
    • 25. Lenguaje: Numbers <ul><li>Java: </li></ul><ul><ul><li>Java soporta tipos primitivos y Objetos. </li></ul></ul><ul><ul><li>Tiene Wrappers para permitir la conversion. </li></ul></ul><ul><ul><li>Java 5+ hay autoboxing /autoUnboxing. </li></ul></ul><ul><li>Groovy: </li></ul><ul><ul><li>Todo es un objeto en el lenguaje. </li></ul></ul><ul><ul><ul><li>El realiza el autoboxing cuando es mezclado con Java. </li></ul></ul></ul><ul><ul><li>BigDecimal es el tipo por defecto (excepto Integers). </li></ul></ul><ul><ul><li>Sobrecarga de operadores. </li></ul></ul><ul><li>http://groovy.codehaus.org/JN0515-Integers </li></ul><ul><li>http://groovy.codehaus.org/JN0525-Decimals </li></ul><ul><li>http://groovy.codehaus.org/JN0535-Floats </li></ul>
    • 26. Lenguaje: Numbers
    • 27. Lenguaje: Collections <ul><li>Map map = new HashMap () </li></ul><ul><li>map . put ( &quot;nombre&quot; , &quot;David&quot; ) </li></ul><ul><li>map . put ( &quot;edad&quot; ,30); </li></ul><ul><li>map . get ( &quot;valor&quot; ); </li></ul><ul><li>List list = new ArrayList ( </li></ul><ul><li>     Arrays . asList ( </li></ul><ul><li>     &quot;primero&quot; , &quot;segundo&quot; )); </li></ul><ul><li>list . add ( &quot;tercero&quot; ); </li></ul>def map = [ nombre: &quot;David&quot; , edad: 30 ] map . valor map [ &quot;valor&quot; ] def list = [ &quot;primero&quot; , &quot;segundo&quot; ] list << &quot;tercero&quot; Syntaxis Nativa en colecciones: Java: Groovy:
    • 28. Lenguaje: Bucles <ul><li>for ( String s: list ) { </li></ul><ul><li>     System . out . println ( s ); </li></ul><ul><li>} </li></ul><ul><li>for ( int n = 1 ; n < 6 ; n ++){ </li></ul><ul><li>     System . out . println ( n ); </li></ul><ul><li>} </li></ul>list . each {      println it } l . upto 5 ,{      println it } Java: Groovy:
    • 29. Lenguaje: GDK <ul><li>import java.io.* ; </li></ul><ul><li>public classReadFile { </li></ul><ul><li>     public static void main ( String [] args ){ </li></ul><ul><li>         try{ </li></ul><ul><li>             BufferedReader br = new BufferedReader ( </li></ul><ul><li>                 new FileReader ( </li></ul><ul><li>                     new File ( &quot;file.txt&quot; ))); </li></ul><ul><li>             String line = null; </li></ul><ul><li>             while (( line = br . readLine ()) != null) { </li></ul><ul><li>                 System . out . println ( line ); </li></ul><ul><li>             } </li></ul><ul><li>         } catch( IOException e ) { </li></ul><ul><li>             e . printStackTrace (); </li></ul><ul><li>         } </li></ul><ul><li>} </li></ul>new File ( file . txt ). echLine { String line ->      println line } Java: Groovy:
    • 30. Lenguaje: Closures <ul><li>//suma </li></ul><ul><li>def sum  =   0 </li></ul><ul><li>[ 1 ,   2 ,   3 ]. each   {  item -> sum  +=  item  } </li></ul><ul><li>println  &quot;Total ${sum}&quot; </li></ul><ul><li>// listar </li></ul><ul><li>def text  =  customers . collect {  item ->  </li></ul><ul><li>     item . name  }. join ( &quot;,&quot; ) </li></ul><ul><li>// llamar a un Closure </li></ul><ul><li>def c  =   {  name  ->  println  &quot;Hola ${name}&quot; } </li></ul><ul><li>c ( &quot;David&quot; ) </li></ul>Definición de Closures
    • 31. Lenguaje: Closures <ul><li>//Simple Loops </li></ul><ul><li>5 . times { print it } </li></ul><ul><li>-> 01234 </li></ul><ul><li>//Strings </li></ul><ul><li>' dog ' . each { c -> println c } </li></ul><ul><li>-> d </li></ul><ul><li>-> o </li></ul><ul><li>-> g </li></ul><ul><li>//Lists and Arrays </li></ul><ul><li>[ 1 , 2 ,' dog' ]. each { print it } </li></ul><ul><li>-> 12 dog </li></ul><ul><li>//Maps </li></ul><ul><li>[ ' rod ' : 33 , ' james' : 35 ]. each { </li></ul><ul><li>     print &quot;${it.key}=${it.value} &quot; </li></ul><ul><li>} </li></ul><ul><li>-> james = 35 rod = 33 </li></ul>Iteración en Closures
    • 32. Lenguaje: GDK <ul><ul><li>String </li></ul></ul><ul><ul><ul><li>contains(), count(), execute(), padLeft(), center(), padRight(), reverse(), tokenize(), each(), etc. </li></ul></ul></ul><ul><ul><li>Collection </li></ul></ul><ul><ul><ul><li>count(), collect(), join(), each(), reverseEach(), find/All(), min(), max(), inject(), sort(), etc. </li></ul></ul></ul><ul><ul><li>File </li></ul></ul><ul><ul><ul><li>eachFile(), eachLine(), withPrintWriter(), write(), getText(), etc. </li></ul></ul></ul>
    • 33. Lenguaje: MarkupBuilder <ul><li>import groovy.xml.* </li></ul><ul><li>def page = new MarkupBuilder () </li></ul><ul><li>page . html { </li></ul><ul><li>     head { title ' Hola ' } </li></ul><ul><li>     body { </li></ul><ul><li>         ul { </li></ul><ul><li>             1 . upto 5 , { li &quot;Mundo ${it}&quot; } </li></ul><ul><li>         } </li></ul><ul><li>     } </li></ul><ul><li>} </li></ul><html>    <head>      <title> Hola </title>    </head>    <body>      <ul>        <li> Mundo 1 </li>        <li> Mundo 2 </li>        <li> Mundo 3 </li>        <li> Mundo 4 </li>        <li> Mundo 5 </li>      </ul>    </body> </html>
    • 34. Mas Groovy <ul><li>- Groovy Doc: </li></ul><ul><li>     http://groovy.codehaus.org/ </li></ul><ul><li>- Groovy Koans: </li></ul><ul><li>     https://github.com/cjudd/groovy_koans </li></ul>
    • 35.   <ul><li>Preguntas... </li></ul>

    ×