Secara umum ketika bekerja dengan modul boneka kompleks, saya akan mengatur variabel di tingkat simpul atau di dalam kelas. misalnya,
node 'foo.com' {
$file_owner = "larry"
include bar
}
class bar {
$file_name = "larry.txt"
include do_stuff
}
class do_stuff {
file { $file_name:
ensure => file,
owner => $file_owner,
}
}
Bagaimana / kapan / mengapa kelas parametrized membantu ketika situasi ini? Bagaimana Anda menggunakan kelas parameterisasi untuk menyusun modul boneka Anda?
$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.Jawaban:
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 (misalnyalarry
) di beberapa tempat berbeda.Cuplikan contoh Anda (dengan dua node tambahan) dapat ditulis sebagai berikut:
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 mendeklarasikanbar
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:
sumber
Cara terbaik untuk memikirkan hal ini adalah dengan melakukannya sejak awal alih-alih mulai dengan mengetahui idiom Wayang.
Apa yang Anda coba lakukan di tempat pertama adalah mengirimkan parameter ke dalam kelas - Anda memberikan informasi yang diperlukan untuk memutuskan bagaimana berperilaku, seperti halnya meneruskan argumen ke suatu fungsi. Katakan ini perl dan Anda memiliki fungsi yang disebut multiply_squares. Anda akan menyebutnya seperti
multiply_squares(3, 4)
, tidak mengatur beberapa variabel global menjadi 3 dan 4 dan kemudian membacanya dari dalam fungsi!Namun secara historis, kode Wayang harus melakukan itu dengan variabel global atau ruang lingkup dinamis, karena kebutuhan untuk melakukannya muncul sebelum bahasa dirancang untuk melakukannya. Secara pribadi, saya pikir begitu kelas parameter mendapatkan sedikit lebih berkembang dan lebih luas digunakan, mereka pada dasarnya akan membuat masalah ruang lingkup variabel sesuatu dari masa lalu, karena memiliki alat yang tepat tersedia untuk pekerjaan itu akan menghilangkan seluruh lapisan peretasan yang menakutkan.
sumber