Kelas parameter adalah konstruksi bahasa untuk membantu Anda menyusun kode Anda lebih baik. Ini mencegah Anda menggunakan variabel global secara berlebihan (seperti pada contoh Anda).
Bayangkan Anda menyertakan 20 kelas lagi dalam deskripsi simpul Anda dan semua akan memerlukan beberapa variabel yang diatur dalam lingkup global atau simpul manifes. Juga kelas parameterisasi memungkinkan Anda untuk memiliki parameter default dengan mudah, sehingga Anda dapat menggunakan nilai default untuk $file_owner
daripada harus memberikan nilai yang sama (misalnya larry
) di beberapa tempat berbeda.
Cuplikan contoh Anda (dengan dua node tambahan) dapat ditulis sebagai berikut:
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,
}
}
Dengan penggunaan variabel global, Anda harus mendeklarasikan variabel bernama $owner
di setiap node dan Anda tidak akan bisa menimpa $file_name
variabel / parameter per node. Sebagai gantinya Anda harus mendeklarasikan bar
kelas lain untuk setiap node.
Dokumen tentang evolusi bahasa Wayang dan tentu saja panduan bahasa memberikan beberapa contoh yang baik tentang bagaimana menggunakan kelas parameter dan alasan di balik konstruksi bahasa ini:
$bar::file_name
dan$::file_owner
mengakses variabel-variabel tersebut. Namun, ketika menggunakan kelas parametrized, variabel yang dikirimkan ke kelas melalui parameter menjadi variabel cakupan lokal.