প্যারামিটারাইজড ক্লাসগুলি আপনার কোডটি আরও ভাল গঠনে সহায়তা করার জন্য একটি ভাষা গঠন। এটি অতিরিক্ত গ্লোবাল ভেরিয়েবলগুলি (যেমন আপনার উদাহরণ হিসাবে) ব্যবহার করা থেকে আপনাকে বাধা দেয়।
কল্পনা করুন যে আপনি আপনার নোডের বর্ণনায় আরও 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অ্যাক্সেস করতে হবে । যাইহোক, প্যারামেট্রাইজড ক্লাসগুলি ব্যবহার করার সময়, প্যারামিটারগুলির মাধ্যমে কোনও শ্রেণিতে পাস হওয়া ভেরিয়েবলগুলি স্থানীয়ভাবে স্কোপযুক্ত ভেরিয়েবল হয়ে যায়।