Ok, jadi ini benar-benar pertanyaan advokat setan.
Kapan variabel global ok, dan jika tidak, apa yang akan Anda gunakan sebagai alternatif?
Sebuah kasus sampingan yang menarik untuk pertanyaan ini, bagaimana bidang kelas statis publik berbeda dari global?
Jawaban:
Sejauh yang saya tahu, bidang statis publik pada dasarnya adalah global yang dapat dipanggil dari mana saja dengan pengecualian bahwa itu tidak menyumbat ruang nama.
Satu-satunya waktu saya secara pribadi menggunakan variabel 'global' dalam kode saya adalah dalam bentuk bidang statis publik yang tidak dapat diubah. Dalam hal ini tidak perlu khawatir tentang nilai yang diputar-balikkan oleh bagian lain dari program dan tentu saja itu jauh lebih baik daripada memiliki selusin variabel dengan nilai permanen yang sama di setiap kelas.
sumber
Secara pribadi, saya menggunakan global untuk konfigurasi runtime - jika properti konfigurasi dimuat saat startup aplikasi, dan hanya sedikit perubahan (dan hanya dari satu tempat), itu mengerikan dan rawan kesalahan untuk menyebarkannya ke setiap metode yang mungkin perlu digunakan di beberapa titik. Lebih baik menggunakan sesuatu yang dapat dibawa ke ruang lingkup dari mana saja yang perlu menggunakannya, karena itu tidak mengacaukan dan mengaburkan tanda tangan metode Anda dan situs panggilan.
sumber
CONFIG_
atauCFG_
awalan.Tidak termasuk sistem waktu nyata / tertanam, Anda seharusnya hanya menggunakan global untuk nilai konstan, sungguh. Jika Anda merasa bahwa Anda tidak dapat menyelesaikan masalah Anda tanpa mereka, Anda mungkin melakukan sesuatu yang salah.
Juga, lihat pola Singleton , itu dingin memberikan solusi yang lebih baik untuk global dalam situasi ketika Anda membutuhkan sesuatu untuk memiliki jalur akses global.
sumber
TIMES_TO_ITERATE_THROUGH_THIS_PARTICULAR_LOOP
hanya relevan dalam satu file / kelas / bagian di mana 'loop khusus ini' muncul.Masalah dengan variabel global adalah Anda harus mewaspadai mereka di mana pun dalam kode Anda. Namun begitu Anda telah memutuskan bahwa Anda perlu tahu tentang global tertentu, ada sedikit lebih lanjut dalam menggunakannya. Oleh karena itu pendapat saya adalah Anda harus memiliki sangat sedikit variabel global, tetapi beberapa yang Anda miliki, Anda harus mendapatkan jarak tempuh maksimum.
Untuk contoh lain tentang sesuatu yang saya rasakan seperti ini, lihatlah penggunaan mixin di Ruby.
sumber
Ini semua tentang ruang nama.
Bayangkan sejenak bahwa semua orang di dunia memiliki nama belakang yang sama. Berantakan sekali.
(Di India, orang Sikh memiliki semua nama belakang yang sama: Singh - Lihatlah)
sumber
Versi singkat: ketika membuatnya lebih mudah untuk beralasan tentang program. Biasanya kasus adalah beberapa jenis negara global atau sumber daya statis yang banyak digunakan.
Versi panjang: Tom Hawtin berkata "dengan aksi seram di kejauhan" ... itulah masalah dengan global - Anda harus tahu di mana itu digunakan dan bagaimana, atau Anda bisa mendapatkan beberapa yang benar-benar aneh dan sulit untuk dilacak bug. Penduduk setempat tidak lebih dan kurang dari sebuah strategi untuk mengurangi ruang lingkup apa yang perlu dipahami oleh programmer untuk alasan tentang program.
Sisi lain dari masalah dengan mengetahui di mana mereka digunakan adalah bahwa Anda dapat berakhir dengan duplikat global - dalam hal ini hal-hal bisa menjadi sangat aneh karena sebagian besar program mendapat dan menetapkan var1 sementara di beberapa tempat var2 digunakan untuk menampung informasi yang sama. Terutama ketika banyak orang mengerjakan kode yang sama. IDE dapat membantu menemukan penggunaan yang mengurangi biaya global, tetapi mereka tidak melakukan apa pun untuk duplikat.
Semakin banyak global yang Anda miliki, semakin sulit untuk melacak apa yang terjadi dengan mereka. Mereka harus sedikit dan jarang.
sumber
Kedua gotchas dengan global dan lajang adalah testability dan deployable.
Untuk pengujian, saya telah melihat terlalu banyak memanfaatkan pengujian yang terlalu kompleks hanya untuk berurusan dengan masa hidup global dan tunggal yang tidak terencana dengan baik. Pastikan bahwa objek tersebut memiliki aturan start up dan down yang jelas dan sederhana.
Adapun penyebaran, ada dua kasus untuk dipertimbangkan. Pertama, bagaimana objek global Anda akan hidup? Apakah itu di perpustakaan statis atau dinamis? Jika objek global itu digunakan kembali untuk sebuah plugin, apakah Anda akan mendapatkan salinan tambahan? Kedua, apa yang terjadi ketika objek global dijatuhkan ke aplikasi paralel? Apakah ini aman?
Secara keseluruhan, saya pikir alasan itu berarti bahwa global dan lajang hanya digunakan secara luar biasa.
sumber
Pengembangan sistem embedded kritis biasanya melibatkan penggunaan variabel global.
Ukuran tumpukan kecil, semuanya dialokasikan secara statis (
malloc()
dilarang), variabel global disembunyikan dari luar perpustakaan tempat mereka berada.sumber
Dalam basis kode VB6 yang mengerikan yang menyalahgunakan global seperti tidak ada hari esok, saya bersalah memperkenalkan yang baru:
Saya pikir ini adalah salah satu dari beberapa kasus penggunaan yang valid untuk objek global.
sumber