Ini gula sintaksis untuk skrip dasar. Menghilangkan kata kunci "def" menempatkan variabel di binding untuk skrip saat ini dan asyik memperlakukannya (kebanyakan) seperti variabel cakupan global:
x = 1
assert x == 1
assert this.binding.getVariable("x") == 1
Sebaliknya, menggunakan kata kunci def tidak menempatkan variabel dalam binding skrip:
def y = 2
assert y == 2
try {
this.binding.getVariable("y")
} catch (groovy.lang.MissingPropertyException e) {
println "error caught"
}
Cetakan: "kesalahan tertangkap"
Menggunakan kata kunci def dalam program yang lebih besar adalah penting karena ini membantu menentukan ruang lingkup di mana variabel dapat ditemukan dan dapat membantu menjaga enkapsulasi.
Jika Anda mendefinisikan metode dalam skrip Anda, itu tidak akan memiliki akses ke variabel yang dibuat dengan "def" di tubuh skrip utama karena mereka tidak dalam ruang lingkup:
x = 1
def y = 2
public bar() {
assert x == 1
try {
assert y == 2
} catch (groovy.lang.MissingPropertyException e) {
println "error caught"
}
}
bar()
mencetak "kesalahan tertangkap"
Variabel "y" tidak berada dalam ruang lingkup di dalam fungsi. "x" berada dalam ruang lingkup karena groovy akan memeriksa binding skrip saat ini untuk variabel. Seperti yang saya katakan sebelumnya, ini hanyalah gula sintaksis untuk membuat skrip cepat dan kotor lebih cepat untuk mengetik (sering satu baris).
Praktik yang baik dalam skrip yang lebih besar adalah selalu menggunakan kata kunci "def" sehingga Anda tidak mengalami masalah pelingkupan yang aneh atau mengganggu variabel yang tidak Anda inginkan.
new FileInputStream('Test.groovy').getChannel()
tanpa impor?