यह बुनियादी लिपियों के लिए वाक्य रचना चीनी है। "डिफ" कीवर्ड को स्वीकार करते हुए वर्तमान स्क्रिप्ट के लिए बाइंडिंग में वैरिएबल डालता है और ग्रूवी इसे (ज्यादातर) विश्व स्तर पर स्कोपेड वैरिएबल की तरह मानता है:
x = 1
assert x == 1
assert this.binding.getVariable("x") == 1
इसके बजाय डिफ कीवर्ड का उपयोग करने से स्क्रिप्ट बाइंडिंग में वैरिएबल नहीं डालती है:
def y = 2
assert y == 2
try {
this.binding.getVariable("y")
} catch (groovy.lang.MissingPropertyException e) {
println "error caught"
}
प्रिंट: "त्रुटि पकड़ी गई"
बड़े कार्यक्रमों में डिफ कीवर्ड का उपयोग करना महत्वपूर्ण है क्योंकि यह उस दायरे को परिभाषित करने में मदद करता है जिसमें चर पाया जा सकता है और इनकैप्सुलेशन को संरक्षित करने में मदद कर सकता है।
यदि आप अपनी स्क्रिप्ट में एक विधि को परिभाषित करते हैं, तो इसका उपयोग उन चर तक नहीं होगा जो मुख्य स्क्रिप्ट के शरीर में "डिफ" के साथ बनाए गए हैं क्योंकि वे दायरे में नहीं हैं:
x = 1
def y = 2
public bar() {
assert x == 1
try {
assert y == 2
} catch (groovy.lang.MissingPropertyException e) {
println "error caught"
}
}
bar()
प्रिंट "त्रुटि पकड़ी गई"
"Y" वेरिएबल फ़ंक्शन के अंदर स्कोप नहीं है। "x" स्कोप है क्योंकि ग्रूवी वेरिएबल के लिए वर्तमान स्क्रिप्ट के बाइंडिंग की जांच करेगा। जैसा कि मैंने पहले कहा था, यह बस टाइप करने के लिए त्वरित और गंदी लिपियों को जल्दी (अक्सर एक लाइनर) बनाने के लिए सिंटैक्टिक चीनी है।
बड़ी स्क्रिप्ट में अच्छा अभ्यास हमेशा "डिफ" कीवर्ड का उपयोग करना होता है, ताकि आप अजीब स्कूपिंग मुद्दों में न चलें या उन चर के साथ हस्तक्षेप करें जिन्हें आप करने का इरादा नहीं करते हैं।
new FileInputStream('Test.groovy').getChannel()
आयात करने की अनुमति क्यों दी गई ?