परिमाणित कक्षाएं आपके कोड को बेहतर ढंग से संरचना करने में आपकी मदद करने के लिए एक भाषा निर्माण हैं। यह आपको वैश्विक चर (जैसे आपके उदाहरण में) का उपयोग करने से रोकता है।
कल्पना कीजिए कि आपने अपने नोड विवरण में 20 और कक्षाएं शामिल की हैं और सभी को कुछ वैरिएबल की आवश्यकता होगी जो कि मैनिफ़ेस्ट के ग्लोबल या नोड स्कोप में सेट किए जा रहे हैं। इसके अलावा, मानकीकृत कक्षाएं आपको आसानी से डिफ़ॉल्ट पैरामीटर रखने की अनुमति देती हैं, इसलिए आप कई अलग-अलग जगहों पर $file_owner
समान मूल्य (जैसे larry
) प्रदान करने के बजाय डिफ़ॉल्ट मान का उपयोग कर सकते हैं।
आपका उदाहरण स्निपेट (दो अतिरिक्त नोड्स के साथ) इस प्रकार लिखा जा सकता है:
node 'example.com' {
class { bar: }
}
node 'example.net' {
class { bar: owner = "harry" }
}
node 'example.net' {
class { bar: file_name = "barry.txt" }
}
class bar($owner = "larry", $file_name = "larry.txt") {
class { do_stuff: owner => $owner, file_name => $file_name }
}
class do_stuff($owner, $file_name) {
file { $file_name:
ensure => file,
owner => $owner,
}
}
वैश्विक चर के आपके उपयोग के साथ, आपको $owner
प्रत्येक नोड में नामांकित चर घोषित करने की आवश्यकता होगी और आप $file_name
प्रति नोड चर / पैरामीटर को अधिलेखित करने में सक्षम नहीं होंगे । इसके बजाय आपको bar
प्रत्येक नोड के लिए एक और वर्ग घोषित करने की आवश्यकता होगी ।
कठपुतली की भाषा के विकास और निश्चित रूप से भाषा गाइड पर कुछ अच्छे उदाहरण दिए गए हैं कि कैसे इस भाषा के निर्माण के पीछे मानकीकृत वर्गों और औचित्य का उपयोग किया जाए:
$bar::file_name
और उपयोग करना होगा$::file_owner
। हालाँकि, जब पैरामीरीज़ेड कक्षाओं का उपयोग किया जाता है, तो पैरामीटर के माध्यम से एक वर्ग में पारित होने वाले चर स्थानीय रूप से स्कोप किए गए चर बन जाते हैं।