Azúcar sintáctico para scripts básicos. La omisión de la palabra clave "def" pone la variable en los enlaces para el script actual y trata maravilloso TI (en su mayoría) como una variable de ámbito global:
x = 1
assert x == 1
assert this.binding.getVariable("x") == 1
El uso de la palabra clave def lugar no pone la variable en los enlaces de secuencias de comandos :
def y = 2
assert y == 2
try {
this.binding.getVariable("y")
} catch (groovy.lang.MissingPropertyException e) {
println "error caught"
}
Lienzo: "error atrapado"
el uso de la palabra clave def en programas de mayor tamaño es importante, ya que ayuda a definir el ámbito en el que se puede encontrar la variable y puede ayudar a preservar la encapsulación.
Si se define un método en el script, no se tiene acceso a las variables que se crean con "def" en el cuerpo del script principal, ya que no están en su 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 capturado"
La variable "y" no está en el alcance dentro de la función. "x" está en el 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 una línea).
La buena práctica en las secuencias de comandos más grandes es utilizar siempre la palabra clave "def" para no tener problemas de alcance extraño o interferir con las variables que no tiene la intención.
¡buena respuesta en profundidad! ¡Gracias! – codeLes