Parametreli sınıflar, kodunuzu daha iyi yapılandırmanıza yardımcı olacak bir dil yapısıdır. Küresel değişkenleri aşırı kullanmanızı önler (örneğin örneğiniz gibi).
Düğüm açıklamanıza 20 sınıf daha eklediğinizi ve hepsinin manifestin global veya düğüm kapsamında bazı değişkenlerin ayarlanmasını gerektirdiğini düşünün. Ayrıca parametreli sınıflar kolayca varsayılan parametrelere sahip olmanızı sağlar, böylece birkaç farklı yerde $file_owneraynı değeri (örneğin larry) sağlamak yerine varsayılan bir değer kullanabilirsiniz .
Örnek snippet'iniz (iki ek düğüme sahip) aşağıdaki gibi yazılabilir:
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,
}
}
Genel değişkenleri kullandığınızda, $ownerher bir düğümde adlandırılmış bir değişken bildirmeniz gerekir ve düğüm $file_namebaşına değişkenin / parametrenin üzerine yazamazsınız. Bunun yerine bar, her düğüm için başka bir sınıf bildirmeniz gerekir .
Kukla'nın dil gelişimi ve elbette dil rehberi belgesi, parametreli sınıfların nasıl kullanılacağı ve bu dil yapısının arkasındaki mantık hakkında bazı iyi örnekler sunmaktadır:
$bar::file_nameve$::file_ownerbu değişkenlere erişmeniz gerekir. Ancak parametreli sınıfları kullanırken, parametreler yoluyla bir sınıfa geçirilen değişkenler yerel olarak kapsamlandırılmış değişkenler haline gelir.