Es azúcar sintáctico para guiones básicos. Omitir la palabra clave "def" coloca la variable en los enlaces para el script actual y Groovy la trata (principalmente) como una variable de alcance global:
x = 1
assert x == 1
assert this.binding.getVariable("x") == 1
El uso de la palabra clave def en su lugar no coloca la variable en los enlaces de los scripts:
def y = 2
assert y == 2
try {
this.binding.getVariable("y")
} catch (groovy.lang.MissingPropertyException e) {
println "error caught"
}
Impresiones: "error detectado"
El uso de la palabra clave def en programas más grandes es importante ya que ayuda a definir el alcance en el que se puede encontrar la variable y puede ayudar a preservar la encapsulación.
Si define un método en su script, no tendrá acceso a las variables que se crean con "def" en el cuerpo del script principal ya que no están dentro del alcance:
x = 1
def y = 2
public bar() {
assert x == 1
try {
assert y == 2
} catch (groovy.lang.MissingPropertyException e) {
println "error caught"
}
}
bar()
imprime "error detectado"
La variable "y" no está dentro del alcance de la función. "x" está dentro del alcance ya que groovy verificará los enlaces del script actual para la variable. Como dije antes, esto es simplemente azúcar sintáctica para hacer que las secuencias de comandos rápidas y sucias sean más rápidas de escribir (a menudo, un revestimiento).
Una buena práctica en los scripts más grandes es usar siempre la palabra clave "def" para no tener problemas de alcance extraños o interferir con variables que no tiene intención.
new FileInputStream('Test.groovy').getChannel()
sin la importación?