Ir al contenido principal

Entradas

Groovy - Referencia #10

Heredocs Otra de las características poderosas que nos ofrece Groovy son los Heredocs. Con ellos hacer cadenas de dos o más línea, sin necesidad de utilizar caracteres de escape, de hecho podríamos verlo como el <pre> de HTML donde se respeta los caracteres a como sean puestos, espacios, tabs, etc. Para usarlos simplemente indicamos tres comas dobles o simples, seguidas y tres mas para cerrar la cadena. Veamos un ejemplo: void heredocs () { println("\nHeredocs") (1..3).each { print "*** " } println("") String s = """ This a is very big and multi line string "You don't need escape characters", really cool """ print s } // heredocs Heredocs *** *** *** This a is very big and multi line string "You don't need escape characters", really cool Como se puede aprecia...

Groovy - Referencia #9

Cadenas en comillas simples o dobles De forma similar a Php, Groovy permite utilizar comillas dobles o comillas simples para definir cadenas, veamos algunos ejemplos: void embeddedQuotes () { println("\nEmbedded quotes") (1..3).each { print "*** " } println("") def string1 = 'My name is "Jon"' def string2 = "My name is 'Jon'" def string3 = "My name is \"Jon\"" print string1 + " " + string2 + " " + string3 } // embeddedQuotes. salida Embedded quotes *** *** *** My name is "Jon" My name is 'Jon' My name is "Jon"

Groovy - Referencia #8

Condiciones de verdad / Eval Truth Parecido a como funciona en JavaScript, Php e inclusive C++, las instrucciones condicionales no solo funcionan con valores booleanos, que es el caso de Java, existen varios otras equivalencias: null -> false no null -> true cadena nula o vacía ->false cadena no nula o vacía -> true valor numérico 0 ->false valor numérico no 0, como -1,1, etc -> true coleccion vacía o nula ->false coleccion no vacía o nula -> true Ejemplo: void evalTruth () { println("\nCondicional statements - truth") (1..3).each { print "*** " } println("") if (1) { println "the value 1 (not zero) is true" } if (!null) { println "the not null value is true" } if ("Jsanca") { println "the not empty string is true...

Groovy - Referencia #7

Groovy - Auto Boxing El auto boxing en Java no es realmente soportado de forma nativa, el auto boxing introducido en Java 5 en realidad es un workaround que utiliza un precompilador para hacer el casteo a objetos por nosotros, por ejemplo si hacemos la siguiente sentencia: List&t;Integer> list = new ArrayList &t;Integer> (); list.add (1); int i = list.get(0); Eso esto traducido por el precompilador de Java 5 como: list.add(new Integer(1)); int i = (Integer)list.get(0); En Groovy, todo objeto nativo es realmente un objeto y se trata como tal, veamos un ejemplo: void autoboxing () { println("\nFull object primitives - autoboxing") (1..3).each { print "*** " } println("") def i = 2 // define an integer println i.class println i.abs() def d = 2.2 println d.class } // autoboxing Salida: Full object primitives - autoboxing *** *** *** class ja...

Groovy - Referencia #6

Safe dereferencing Esta es una de las características que veo como mis favoritas en Groovy y valga mencionar, es muy poderosa. El Safe Dereferencing, proporciona una sintaxis muy reducida para acceder a objetos compuestos (Composite). Para contextualizar, si en Java tenemos un Objeto, Persona y dentro de este tenemos una composición Address y dentro de esta State: clas State { String name = "NY" String detail = "NewYork" } class Address { State state = null String street .... } class Persona { // ... Address address = null } Si deseamos obtener el atributo "name" del objeto State, deberíamos hacer algo como así, para evitarnos NullPointerException's String stateName = null; if (null != persona) { if (null != persona.getAddress()) { if (null != persona.getAddress().getState()) { stateName = persona.getAddress().getState().getName(); En Groovy solo debemos hacer: stateName = persona?,address?.state?...

Groovy - Referencia #5

Manejo de excepciones En Java existen dos tipos de excepciones, Exception y RuntimeException, la diferencia fundamental entre ambas, es que la primera necesita ser cachada y declarada en los métodos, la segunda no, lo cual a veces hace que nuestro métodos tengas muchas excepciones declaradas después del throws, sin embargo en Groovy todas las excepciones se manejan como Runtime, inclusive las que no lo son en Java, por ejemplo cualquier excepción IOException, no debe ser cachada ni declarada y así el resto. Muy parecido a como funcionan en .Net. Vamos algunos ejemplos para apreciar las diferencias: void openFileInGroovyStyle () { println("\nException handling") (1..3).each { print "*** " } println("") // No necesita ni hacer the throws en el método, o el try/catch def reader = new FileReader ("file.txt"); } En Java: void openFileInJavaStyle () throws IOException { new Fi...

Groovy - Referencia #4

Duck Typing Una característica muy propia de un lenguaje dinámico es el "duck typing", Groovy nos da soporte intentando adivinar el tipo que instanciamos. A continuación un ejemplo: void duckTyping () { def duckString String otherString println("\nDuck Typing") (1..3).each { print "*** " } println("") duckString = "Hello" otherString = "Hello" println (duckString.class); // duckString.getClass() println (duckString.class == otherString.class); // duckString.class.equal(otherString.class) } // duckTyping. La salida de este ejemplo es: Duck Typing *** *** *** class java.lang.String true Aprecie que la clase de la variable "duckString" es interpretada por Groovy como un String y cuando lo comparamos con una variable tipada, vemos que es del mismo tipo (java.lang.String). Vale la pena indicar, que el "duck typing", es opcion...