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 opcional, es decir puede indicar o no el tipo, particularmente cuando utilizamos IDEs, el indicar el tipo proporciona mas facilidad a la hora de usar el intelligence.
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 opcional, es decir puede indicar o no el tipo, particularmente cuando utilizamos IDEs, el indicar el tipo proporciona mas facilidad a la hora de usar el intelligence.
Comentarios
def myVar = new File (...)
myVar.exists()
El plugin para Eclipse por ejemplo, no analiza el tipo, si no el tipo de la implementación, osea analiza el objeto instanciado.