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.
sumber
Jawaban:
Jangan gunakan variabel global.
Juga, jangan berikan parameter ke rantai fungsi!
Sulit karena Anda tidak menggunakan contoh aktual. Tetapi biasanya akan ada pendekatan yang lebih baik.
Katakanlah kita memiliki variabel kata sandi yang perlu kita gunakan untuk memanggil apis yang inturn digunakan oleh berbagai fungsi tingkat rendah.
Pendekatan global (kode psudo)
Pendekatan parameter lewat
Pendekatan objek
sumber
Hindari global seperti wabah.
Kode apa pun dapat memodifikasi global. Jadi jika Anda memiliki rantai A (x) -> B (x) -> C (x) -> ... -> Z (x), dan Anda menyimpan x ke dalam X global dan sekarang Anda memiliki rantai A- > B-> C -> ...-> Z, lalu pada setiap langkah rantai panjang itu, atau dalam kode yang sepenuhnya independen, seseorang dapat mengubah X. Dan nilai yang digunakan Z bisa sangat berbeda dari yang A dimulai dengan.
Ini mimpi buruk jika Anda ingin memastikan bahwa kode Anda melakukan apa yang seharusnya dilakukan, atau bahwa ia melakukan apa yang Anda pikirkan.
sumber