Temel senaryolar için sözdizimsel şekerdir. "Def" anahtar sözcüğünü atlamak, değişkeni geçerli komut dosyasının bağlantılarına koyar ve groovy (çoğunlukla) genel olarak kapsamlı bir değişken gibi davranır:
x = 1
assert x == 1
assert this.binding.getVariable("x") == 1
Bunun yerine def anahtar sözcüğünü kullanmak, değişkeni komut dosyası bağlamalarına koymaz:
def y = 2
assert y == 2
try {
this.binding.getVariable("y")
} catch (groovy.lang.MissingPropertyException e) {
println "error caught"
}
Çıktılar: "hata yakalandı"
Daha büyük programlarda def anahtar sözcüğünün kullanılması, değişkenin bulunabileceği kapsamın tanımlanmasına ve kapsüllemenin korunmasına yardımcı olabileceğinden önemlidir.
Komut dosyanızda bir yöntem tanımlarsanız, kapsamda olmadığı için ana komut dosyasının gövdesinde "def" ile oluşturulan değişkenlere erişemez:
x = 1
def y = 2
public bar() {
assert x == 1
try {
assert y == 2
} catch (groovy.lang.MissingPropertyException e) {
println "error caught"
}
}
bar()
"hata yakalandı"
"Y" değişkeni işlevin kapsamında değildir. "x", değişkenin geçerli komut dosyasının bağlantılarını kontrol edeceği için kapsamdadır. Daha önce söylediğim gibi, bu, hızlı ve kirli komut dosyalarını yazmayı daha hızlı hale getirmek için sadece sözdizimsel şekerdir (genellikle bir astar).
Büyük komut dosyalarında iyi bir uygulama her zaman "def" anahtar sözcüğünü kullanmaktır, böylece tuhaf kapsam belirleme sorunlarıyla karşılaşmaz veya istemediğiniz değişkenlere müdahale etmezsiniz.
new FileInputStream('Test.groovy').getChannel()
içe aktarma işlemini devre dışı bıraktınız ?