Đó là cú pháp đường cho các kịch bản cơ bản. Việc bỏ qua từ khóa "def" sẽ đặt biến trong các ràng buộc cho tập lệnh hiện tại và Groovy xử lý nó (phần lớn) giống như một biến có phạm vi toàn cầu:
x = 1
assert x == 1
assert this.binding.getVariable("x") == 1
Thay vào đó, sử dụng từ khóa def không đặt biến trong các ràng buộc của tập lệnh:
def y = 2
assert y == 2
try {
this.binding.getVariable("y")
} catch (groovy.lang.MissingPropertyException e) {
println "error caught"
}
In: "lỗi bắt"
Sử dụng từ khóa def trong các chương trình lớn hơn rất quan trọng vì nó giúp xác định phạm vi có thể tìm thấy biến và có thể giúp duy trì đóng gói.
Nếu bạn xác định một phương thức trong tập lệnh của mình, nó sẽ không có quyền truy cập vào các biến được tạo bằng "def" trong phần thân của tập lệnh chính vì chúng không có trong phạm vi:
x = 1
def y = 2
public bar() {
assert x == 1
try {
assert y == 2
} catch (groovy.lang.MissingPropertyException e) {
println "error caught"
}
}
bar()
in "lỗi bắt"
Biến "y" không nằm trong phạm vi bên trong hàm. "x" nằm trong phạm vi vì Groovy sẽ kiểm tra các ràng buộc của tập lệnh hiện tại cho biến. Như tôi đã nói trước đây, đây chỉ đơn giản là cú pháp đường để làm cho các kịch bản nhanh và bẩn nhanh hơn để loại ra (thường là một lớp lót).
Thực hành tốt trong các tập lệnh lớn hơn là luôn sử dụng từ khóa "def" để bạn không gặp phải các vấn đề phạm vi lạ hoặc can thiệp vào các biến bạn không có ý định.
new FileInputStream('Test.groovy').getChannel()
nhập khẩu?