Dalam buku C ++, penulis mengatakan kita tidak lagi membutuhkan fungsi dengan daftar parameter yang panjang karena sebagian besar parameter dapat dire-refored menjadi variabel status dalam sebuah kelas. Di sisi lain, buku pemrograman fungsional mengatakan variabel negara jahat karena menyebabkan efek samping yang menyebabkan bug rentan dan sulit untuk memparalelkan kode. Saya menjadi bingung. Haruskah kode menghindari ketergantungan pada variabel status sebanyak mungkin dengan memindahkan variabel statusnya ke daftar parameter fungsi?
10
Jawaban:
Tergantung jika Anda pemrograman dalam
procedural
ataufunctional
paradigma. Kondisi yang bisa berubah diperlukan untuk yang pertama dan melumpuhkan untuk yang berikutnya. Ini apel dan jeruk. Mereka berdua benar di bailiwicks mereka!Anda dapat menerapkan penugasan tunggal dan teknik fungsional lainnya ke bahasa prosedural imperatif, keadaan tidak berubah membuat pemrograman bersamaan lebih deterministik, tetapi membuat setiap objek tidak dapat diubah dalam bahasa seperti Java atau C ++ hampir mustahil karena model ingatan mereka tidak mudah mendukung paradigma ini.
sumber
Jika saya memahami pertanyaan Anda dengan benar, Anda mempertanyakan kondisi apa yang memenuhi syarat baik penggunaan parameter atau variabel kelas / anggota / bidang / dll? Saya berasumsi Anda merujuk pada suatu metode, dan bukan suatu fungsi. Jika ini tentang C ++ secara khusus, saya sarankan untuk memindahkan pertanyaan Anda ke stack overflow.
Daftar parameter panjang mungkin merupakan tanda bahwa Anda mungkin perlu mengubah metode Anda menjadi satu set yang lebih granular. Secara umum, menggunakan parameter akan membuat kode Anda lebih longgar digabungkan. Saya tidak yakin apakah ini benar untuk sebagian besar bahasa OO modern lagi, tetapi pembuatan objek bisa mahal, terutama jika ada banyak variabel kelas yang terlibat; jadi, jika variabel kelas Anda objek dan direferensikan sering dalam suatu program, maka mereka dapat dibenarkan sebagai variabel kelas.
Juga:
sumber
Tidak, variabel keadaan per se tidak menyebabkan efek samping.
Memanggil metode setter (pada struktur data yang terlihat di tempat lain) adalah efek samping.
Anda dapat memiliki struktur data untuk menyembunyikan daftar parameter yang panjang dan menghindari efek samping jika Anda membuatnya sesuai. Ini adalah contoh kecil (di Jawa, belum diuji):
Tentu saja, konstruktor ManyParams masih akan memiliki daftar parameter panjang dengan cara ini. Tapi itu tersembunyi.
sumber