এটি বেসিক স্ক্রিপ্টগুলির জন্য সিনট্যাকটিক চিনি। "ডিফ" কীওয়ার্ডটি ছাড়াই বর্তমান স্ক্রিপ্টটির জন্য বাইন্ডিংগুলিতে পরিবর্তনশীল রাখে এবং গ্রোভি এটি (বেশিরভাগ ক্ষেত্রে) বিশ্বব্যাপী স্কোপযুক্ত ভেরিয়েবলের মতো আচরণ করে:
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" ভেরিয়েবলটি ফাংশনের অভ্যন্তরে নেই। "এক্স" সুযোগে রয়েছে কারণ গ্রোভি চলকের জন্য বর্তমান স্ক্রিপ্টের বাইন্ডিংগুলি পরীক্ষা করবে। যেমনটি আমি আগেই বলেছি, এটি দ্রুত এবং নোংরা স্ক্রিপ্টগুলি দ্রুত টাইপ করতে (প্রায়শই একটি লাইনার) দ্রুত তৈরি করার জন্য এটি সিনট্যাকটিক চিনি।
বৃহত্তর স্ক্রিপ্টগুলিতে ভাল অনুশীলন হ'ল "ডিএফ" কীওয়ার্ডটি সর্বদা ব্যবহার করা যাতে আপনি অদ্ভুত স্কোপিং ইস্যুগুলিতে না চলে যান বা ভেরিয়েবলগুলির সাথে হস্তক্ষেপ না করেন যা আপনি চান না।
new FileInputStream('Test.groovy').getChannel()
আমদানি করার অনুমতি দেওয়া হয়েছিল ?