Nicolás Bello Camilletti
            @nbellocam
¿Que es   Groovy?
Esto   era   Groovy
Lenguaje ágil y
dinámico para la JVM
Integración con Java


Java      Groovy   Scala      …




              JVM
Curva de aprendizaje
        casi nula
Facilita la escritura

       de scripts
Soporta Domain
Specific Languages
Fuertemente
      tipado
Orientado a
  objetos
Duck Typing
Historia


                          29/03/2004
29/08/2003                Se aprueba                  07/12/2007
Nacimiento                 la JSR 241                 Versión 1.5




             16/03/2004                 02/01/2007                  Actualmente
              Propuesta                 Versión 1.0                 Versión 1.8.#
               JSR 241                                               y beta de 2
Algunas
particularidades
Variables
• Tipado estático
  – Escribiendo el tipo explícitamente



• Tipado dinámico
  – Utilizando la palabra reservada def
Sistema de Tipos
• Numeros Enteros         • Boolean
   – Integer
   – Long                 • Strings
   – BigInteger
   – Byte
                          • Colecciones
   – Short                   – List

                             – Map
• Punto flotante
                             – Set
   – BigDecimal
   – Float                • Rangos
   – Double
                          • Expresiones Regulares
Colecciones – Listas
Colecciones - Maps
Colecciones - Rangos
Strings y GStrings
Expresiones Regulares
Groovy Truth
• Boolean
• Cosas que son false
  – Colecciones vacías(listas, maps)
  – Iteradores y enumeradores sin mas
    elementos
  – Strings vacios
  – Matchers de regex que no coinciden (=~)
  – Cero
  – null
Métodos
Closures (1)

• { [param1, param2 …] -> sentencia1; sentencia2... }
Closures (2)
Ciclos con closures (1)
• Each



• EachWithIndex

• Times
Ciclos con closures (2)

• Collect




• FindAll
Operadores (1)
• Colección*.operación  Spread Operator



• objeto?.operación  Safe Navigation Operator

  – Similar a:
Operadores (2)
• objeto?:valorDefault Elvis Operator
  def displayName = user.name ?: "Anonymous"


  – Operador ternario equivalente

  def displayName = user.name ? user.name : "Anonymous“
Orientación a Objetos
GroovyBeans (1)
GroovyBeans (2)
• Con access modifier
   – Field

• Sin access modifier
   – Field privado
   – Mas getter y setter públicos (una property)
      • Se pueden sobreescribir

• Property final
   – Field privado como final
   – Solo getter
Expando
Implementando Interfaces con Map
Domain Specific Languages

• Muy buen soporte

• Concepto de Builders

• Sobrecarga de operadores

• Closures como parámetros

• Y muchos mas…
Soporte para Lenguajes de
         Marcado
Diferencias con java

• Defaults imports

• == es equals

• Return opcional

• This en métodos estáticos para clase

• The Groovy way… 
Ejemplos

• Java




• Groovy
Ejemplo concurrencia
• Groovy




• Java
Programación de GUI
• Wrapper de Swing  Usa Builders
Conclusiones
Usar Groovy en:
• Integración de componentes

• Modelos de negocio muy dinámicos

• Pruebas de concepto

• Proyectos rápidos y chicos

• Scripting
No usar Groovy en:
• Algoritmos complejos
   – Cálculos intensivos

• Manejo de grandes cantidades de datos
   – Problema con creación de objetos por ser dinámico

• Sistemas con
   – Requerimientos bien definidos
   – Pocas posibilidades de evolución

• Proyectos muy grandes
No trabajen
           duro.




Trabajen de forma
  inteligente!
Recursos
• Sitio oficial
  – http://groovy.codehaus.org/
Pruébenlo!
Muchas Gracias!!!

Groovy.v2

Notas del editor

  • #15 29/08/2003: James Strachan hace un post en su blog dándole nacimiento a Groovy.16/03/2004: se propone al JCP, bajo la JSR 241 la especificación de Groovy dentro de la JVMJava Specification Request241: The Groovy Programming Language29/03/2004: se aprueba de forma unánime por todo el comité. La especificación se larga con una licencia estilo BSD / Apache02/01/2007: se lanza la versión 1.0 y durante este año Groovy gana el premio JAX al proyecto más innovador y creativo del año.
  • #27 // Ahora vemos que cambiando la variable cambiamos el closure
  • #35 An Expando is different from a map in that you can provide synthetic methods that you can call on the object.The player.greeting assignment passes in a closure to execute when greeting() is called on the Expando. Notice that the closure has access to the properties assigned to the Expando, even though these values may change over time, using Groovy's GString "$variableOrProperty" notation.
  • #38 Builders are based on the builder pattern from the GOF design pattern book. It provides a way to build your own DSL and represents a powerful concept in Groovy
  • #39 Default imports:java.io.*java.lang.*java.math.BigDecimaljava.math.BigIntegerjava.net.*java.util.*groovy.lang.*groovy.util.*