Groovy y Scala son lenguajes que se están haciéndose famosos en la plataforma Java. Los dos son similares pero tienen diferencias importantes; que son buenas saberlas antes de elegir uno o otro.
Como semejanza los dos lenguajes corren sobre la JVM, con interoperabilidad con toda la plataforma. Los dos son orientados a objetos pero Scala también es funcional y los dos tienen clausuras. Además los dos permiten un sistema de reutilización con mixins.
Los dos lenguajes soportan aplicación parcial de una función y curring, pero el uso de estas características es más natural en Scala dado que es funcional. Además Scala optimiza las funciones recursivas esto tiene gran importancia en el paradigma funcional pero no tiene tanta importancia en la programación imperativa.
Los dos tienen por defecto evaluación ansiosa o eagerly; sin embargo Scala permite call-by-name y lazy evaluation. En Groovy se puede emular call-by-name con clousures.
Scala no tiene el concepto de campos o clases estáticas, utiliza el concepto de objetos que son similares a objetos singletones; en cambio Groovy, si utiliza statics.
Groovy es un lenguaje dinámicamente tipado pero también podemos trabajar con tipado estático (definiendo los tipos a las variables), esto puede ser bueno o malo depende de como lo veamos; además Groovy soporta dynamic meta-programming.
Scala es un lenguaje estáticamente tipado por lo tanto no soporta dynamic meta-programming, es este punto Scala es más parecido a Java pero Scala cuenta con un sistema de tipos más sofisticado que Java. Algo que también hace la curva de aprendizaje más empinada.
Groovy es sintácticamente más parecido a Java pero semánticamente se ve la influencia que tuvo Ruby. Scala en cambio sintácticamente se ve la influencia de Java y Ruby, pero semánticamente fue influido por Java, SML, Haskell y gBeta.
A mi entender lo principal que impulso a Groovy fue Grails fue el caballo de batalla y que le hizo muy buena publicidad al lenguaje. En cambio Scala no tenia un framework de desarrollo ágil que lo impulsara hasta que la empresa Typesafe compro el framework Play! y con Play 2 adaptaron a Play para que funciones con Scala. Si bien Grails esta super maduro, Play! tiene una comunidad muy buena.
James Strachan el creador de Groovy dijo: “I can honestly say if someone had shown me the Programming in Scala book by Martin Odersky, Lex Spoon & Bill Venners back in 2003 I’d probably have never created Groovy.” Dicho que condena a Groovy, pero a mi entender es un tanto injusto. Groovy es un lenguaje de tipado dinámico con características que lo hacen muy práctico y muy fácil de aprender. En cambio Scala es un lenguaje de tipado estático, que tiene una curva de aprendizaje mayor a Groovy.
Estas son las diferencias más importantes, que tenemos que tener en cuenta cuando escogemos uno o el otro…