To cukier syntaktyczny dla podstawowych skryptów. Pominięcie słowa kluczowego „def” umieszcza zmienną w powiązaniach bieżącego skryptu i groovy traktuje ją (głównie) jak zmienną o globalnym zasięgu:
x = 1
assert x == 1
assert this.binding.getVariable("x") == 1
Zamiast tego użycie słowa kluczowego def nie powoduje umieszczenia zmiennej w powiązaniach skryptów:
def y = 2
assert y == 2
try {
this.binding.getVariable("y")
} catch (groovy.lang.MissingPropertyException e) {
println "error caught"
}
Wydruki: „wykryto błąd”
Użycie słowa kluczowego def w większych programach jest ważne, ponieważ pomaga zdefiniować zakres, w którym można znaleźć zmienną, i może pomóc zachować enkapsulację.
Jeśli zdefiniujesz metodę w skrypcie, nie będzie ona miała dostępu do zmiennych utworzonych za pomocą „def” w treści skryptu głównego, ponieważ nie są one objęte zakresem:
x = 1
def y = 2
public bar() {
assert x == 1
try {
assert y == 2
} catch (groovy.lang.MissingPropertyException e) {
println "error caught"
}
}
bar()
drukuje „złapany błąd”
Zmienna „y” nie wchodzi w zakres funkcji. „x” jest w zakresie, ponieważ groovy sprawdzi powiązania bieżącego skryptu dla zmiennej. Jak powiedziałem wcześniej, jest to po prostu cukier składniowy, dzięki któremu szybkie i brudne skrypty szybciej się pisze (często jedna linijka).
Dobrą praktyką w przypadku większych skryptów jest zawsze używanie słowa kluczowego „def”, aby nie napotkać dziwnych problemów dotyczących zakresu lub ingerować w zmienne, których nie zamierzasz używać.
new FileInputStream('Test.groovy').getChannel()
bez importu?