Buscar..


Observaciones

Groovy es

  • es un lenguaje dinámico opcionalmente escrito para la Máquina Virtual de Java

  • se basa en las fortalezas de Java, pero tiene funciones adicionales inspiradas en lenguajes como Python, Ruby y Smalltalk

  • pone a disposición de los desarrolladores de Java funciones de programación modernas con una curva de aprendizaje de casi cero

  • proporciona la capacidad de escribir estáticamente la comprobación y compilar estáticamente su código para la robustez y el rendimiento

  • admite lenguajes específicos de dominio y otra sintaxis compacta para que su código sea fácil de leer y mantener

  • hace que escribir shell y construir scripts sea fácil con sus potentes primitivas de procesamiento, habilidades OO y un Ant DSL

  • aumenta la productividad del desarrollador al reducir el código de los andamios cuando se desarrollan aplicaciones web, GUI, de base de datos o de consola

  • simplifica las pruebas apoyando las pruebas unitarias y burlándose fuera de la caja

  • Se integra perfectamente con todas las bibliotecas y clases Java existentes

  • se compila directamente en el bytecode de Java para que pueda usarlo en cualquier lugar que use Java

Versiones

Versión Notas de lanzamiento Fecha de lanzamiento
2.4 http://groovy-lang.org/releasenotes/groovy-2.4.html 2015-01-21
2.3 http://groovy-lang.org/releasenotes/groovy-2.3.html 2014-05-05
2.2 http://groovy-lang.org/releasenotes/groovy-2.2.html 2013-11-18
2.1 http://groovy-lang.org/releasenotes/groovy-2.1.html 2013-01-24
2.0 http://groovy-lang.org/releasenotes/groovy-2.0.html 2012-06-28
1.8 http://groovy-lang.org/releasenotes/groovy-1.8.html 2011-04-27
1.7 http://groovy-lang.org/releasenotes/groovy-1.7.html 2009-12-22
1.6 http://groovy-lang.org/releasenotes/groovy-1.6.html 2009-02-18
1.5 http://groovy-lang.org/releasenotes/groovy-1.5.html 2007-12-07
1.0 2007-01-02

Instalación o configuración

Hay dos formas comunes de instalar Groovy.

Descargar

El binario Groovy se puede descargar en la página de descarga del sitio web de Groovy. Puede descomprimir el archivo y agregar la ruta a %GROOVY_HOME%/bin/groovy.bat a la variable de entorno del sistema PATH, donde% GROOVY_HOME% es el directorio donde Groovy está desempaquetado.

SDKMAN

La otra opción es usar SDKMAN . Esta opción ha crecido rápidamente en popularidad y hace que la administración de varias versiones de Groovy sea muy simple. También soporta otras aplicaciones en la ecosfera "GR8". Esta opción funciona muy bien de forma nativa en Linux y Mac, pero requiere Cygwin en Windows.

Siguiendo las instrucciones de la página de descarga de Groovy , puede seguir los siguientes pasos para instalar SDKMAN.

$ curl -s get.sdkman.io | bash

Una vez que SDKMAN está instalado, ahora tiene acceso al comando sdk . Con este comando puedes hacer muchas cosas útiles.

Instalar groovy

$ sdk install groovy

Esto instalará la última versión de Groovy.

Listar versiones de Groovy

$ sdk ls groovy

Esto le permite ejecutar un comando ls estilo Linux en el software Groovy, enumerando todas las opciones disponibles. Hay un * junto a cada versión instalada y una > para indicar sus versiones actuales.

Cambia las versiones de Groovy

$ sdk use groovy 2.4.7

Esto cambiará la versión actual de Groovy a 2.4.7. Si tiene otras versiones instaladas, puede cambiar a cualquiera de ellas.

Puede listar la versión actual de groovy con el comando groovy -version .

posh-gvm

El nombre inicial de SDKMAN era GVM y posh-gvm es un puerto de GVM para Windows Powershell. Por lo tanto, si se desarrolla en una máquina con Windows y no quiere usar SDKMAN en Cygwin, posh-gvm es para usted. Funciona igual que SDKMAN, pero en lugar de sdk , el comando es gmv . Asi que

PS C:\Users\You> gmv install groovy

instalará groovy a través de posh-gvm en su máquina con Windows.

Hola Mundo

La versión Groovy de Hello World.

println 'Hello World!'

Hola mundo en groovy

El siguiente ejemplo ilustra el Hello World más simple en groovy usando un script, coloque el siguiente fragmento de código en un archivo, por ejemplo, helloWorld.groovy

println 'Hello World!'

Cómo ejecutar: En la línea de comandos, groovy helloWorld.groovy

Salida: Hello World!

Usando Groovy en un proyecto Java

Groovy tiene acceso a todas las clases de java, de hecho, las clases de Groovy SON clases de Java y pueden ser ejecutadas directamente por la JVM. Si está trabajando en un proyecto Java, usar Groovy como un simple lenguaje de scripting para interactuar con su código Java es una tarea fácil.

Para hacer las cosas aún mejor, casi cualquier clase de Java puede ser renombrada a .groovy, compilada y ejecutada y funcionará exactamente como lo hizo, groovy está cerca de ser un super conjunto de Java, este es un objetivo declarado de groovy.

Groovy tiene un REPL. groovysh viene con Groovy y puede usarse para crear instancias y probar rápidamente una clase Java si su classpath está configurada correctamente. Por ejemplo, si su classpath clase apuntaba a su eclipse "classes / bin", entonces podría guardar su archivo en eclipse, saltar a groovysh y crear una instancia de la clase para probarlo.

Las razones para usar Groovy para hacer esto en lugar de solo Java son: El cargador de clases es GRANDE para recoger nuevas clases a medida que se compilan. Generalmente no es necesario salir / reiniciar groovysh medida que se desarrolla.

La sintaxis es TERSE. Esto no es bueno para el código de mantenimiento, pero para los scripts y las pruebas puede reducir su código de manera significativa. Una de las grandes cosas que hace es eliminar las excepciones marcadas (o, más precisamente, convertir todas las excepciones marcadas en excepciones no verificadas). Esto convierte el código como este (Imprimir hola después de un segundo):

class JavaClass {
    public static void main(String[] args) {
        try {
            Thread.sleep(1000);
        } catch(InterruptedException e) {
            // You shouldn't leave an empty catch block, but who cares if this was interrupted???
        }
        System.out.println("Hello!");
    }
}

en Groovy's

Thread.sleep(1000)
print "Hello!"

Groovy también tiene una sintaxis de inicialización muy ajustada. Esto le permite especificar los datos como desee sin pensarlo:

En Java para inicializar un mapa, probablemente deberías hacer algo como esto:

String[] init = { "1:Bill", "2:Doug", "3:Bev" };
// Note the rest of this can be put in a function and reused or maybe found in a library, but I always seem to have to write this function!
Map m = new HashMap<Integer, String>();
for(String pair : int) {
    String[] split = pair.split(":");
    m.put(new Integer(split[0]), split[1])
}

Esto no es malo, pero es otra cosa que mantener. En groovy solo usarías:

Map map = { 1 : "Bill", 2 : "Doug", 3 : "Bev" }

Y ya está hecho. La sintaxis de la lista es igual de fácil.

La otra gran ventaja es la sintaxis de cierre de groovy. Es asombrosamente conciso y divertido, algo más difícil de mantener, pero para los scripts no es una prioridad. Como ejemplo, aquí hay un código maravilloso para encontrar todos los archivos .txt que contienen la palabra Hello en el directorio actual:

println new File('.').files.findAll{ it.name.endsWith('.txt') && it.text.contains('Hello') }.collect{ it.name }

Este ejemplo utiliza algunos trucos "Groovy":

  • .files refiere al método getFiles() - groovy puede cambiar entre getter / setter y la sintaxis de propiedad a voluntad

  • it. se refiere al elemento actual de una iteración. { it } es un acceso directo para { it -> it } , por ejemplo:

    [1, 2, 3] .collect {it ^ 2} == [1, 4, 9]

  • it.text (donde it trata de un archivo) utiliza un maravilloso método agrega a File para recuperar el texto completo del archivo. Esto es increíblemente útil en los scripts.

Hola mundo Shebang (linux)

Dado un archivo hello.groovy con contenido:

#!/usr/bin/env groovy
println "Hello world"

Puede ejecutarse desde la línea de comando si se le da permiso de ejecución como

$ ./hello.groovy

Uso de inyectar () en la lista para crear una cadena CSV

En Groovy, el método inyect () es uno de los métodos acumulativos que nos permite agregar (o inyectar) nuevas funcionalidades en cualquier objeto que implemente el método inyect (). En el caso de una Colección, podemos aplicar un cierre a una colección de objetos de manera uniforme y luego cotejar los resultados en un solo valor. El primer parámetro del método inyect () es el valor inicial de la acumulación y el segundo parámetro es el cierre.

En este ejemplo, tomaremos una Lista de cadenas como parámetro y emitiremos los valores de esas cadenas delimitadas por comas. He usado esta funcionalidad para agregar una lista de valores a una cadena de consulta REST y, si la modifica un poco, la he usado para incluir valores en una instrucción SQL como parte de una cláusula IN. Aquí está el código para hacer esto:

public String convertToCSV( List<String> list ) {
    if (list == null) {
        return ""
    }
    return list.inject( '' ) { result, item ->
        result + ( result && item ? ',' : '' ) + ( item ? "${item.trim()}" : '' )
    }
}

assert convertToCSV( null ) == ""
assert convertToCSV( ["aaa", "bbb  ", null, "  ccc  "] ) == "aaa,bbb,ccc" 

En este ejemplo, el primer parámetro del método inyect () es una cadena de longitud cero, lo que significa que cuando se procesa el primer elemento de la lista, el resultado también es una cadena de longitud cero. Esto se resuelve en falso en la primera evaluación ternaria, por lo que no obtenemos una coma al principio de la cadena. Con cada iteración consecutiva a través de los elementos de la lista, el resultado se convierte en la concatenación de sí mismo, una coma y luego el siguiente elemento hasta que alcancemos el último elemento de la lista.

La ventaja de este enfoque es que no necesita una variable fuera de una construcción de bucle para mantener el resultado de String concatenado. La implicación es que esto puede llevar a efectos secundarios en su código. Con el método inyect (), este comportamiento se inyecta y la colección recopila el resultado de las llamadas al cierre para usted. La desventaja de este enfoque puede ser la legibilidad. Pero con algo de experiencia, se vuelve más fácil de leer y entender, y espero que este ejemplo le ayude a lograr ese objetivo.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow