Saya punya pertanyaan yang sangat sederhana yang telah menghantui saya untuk sementara waktu ketika kode saya mulai tumbuh.
Haruskah parameter digantikan oleh variabel global ketika mereka melewati rute panjang panggilan fungsi bersarang?
Saya mengerti bahwa lingkungan global dapat membuat keadaan suatu program tidak dapat diprediksi karena banyak fungsi dapat memodifikasi variabel bersama, tetapi tetap saja, ruang global membuat segalanya menjadi sangat mudah.
Biarkan saya jelaskan:
functionA(){
x = something
functionB(x)
}
functionB(x){
functionC(x)
}
functionC(x){
finallyDoSomethingWithX(x)
}
finallyDoSomethingWithX(x){
x += 1 //Very dummy example ignoring pass by value, not reference.
}
Digantikan oleh:
globalX;
functionA(){
globalX = something
functionB()
}
...
...
...
finallyDoSomethingWithX(){
globalX += 1
}
Saya merasa cara kedua memberikan begitu banyak kebebasan untuk memprogram karena parameter dapat terakumulasi dengan mudah dan juga terkadang sangat membatasi ketika kode harus digunakan kembali, tetapi pada saat yang sama saya merasa fungsi tersebut akan kehilangan modularitasnya ketika dikaitkan dengan variabel dalam lingkungan global, juga kehilangan reusability ketika, misalnya, saya ingin beroperasi finallyDoSomethingWithX
dengan variabel lain yang berbeda tha globalX
.
Saya pikir ini terjadi pada saya karena saya tidak benar-benar menggunakan pola desain karena saya pemrograman dalam Javascript, yang bagi saya terasa seperti satu-naskah-penawaran-dengan-semua bahasa untuk proyek-proyek menengah.
Ada saran? pola? Saya bisa lebih spesifik jika diperlukan.