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_owner
aynı 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, $owner
her bir düğümde adlandırılmış bir değişken bildirmeniz gerekir ve düğüm $file_name
başı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_name
ve$::file_owner
bu 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.