Dalam C / C ++, apakah variabel global seburuk yang menurut profesor saya?
Dalam C / C ++, apakah variabel global seburuk yang menurut profesor saya?
Jawaban:
Masalah dengan variabel global adalah karena setiap fungsi memiliki akses ke ini, menjadi semakin sulit untuk mengetahui fungsi mana yang benar-benar membaca dan menulis variabel-variabel ini.
Untuk memahami cara kerja aplikasi, Anda harus memperhitungkan setiap fungsi yang mengubah kondisi global. Itu bisa dilakukan, tetapi seiring pertumbuhan aplikasi itu akan semakin sulit sampai hampir tidak mungkin (atau setidaknya membuang-buang waktu).
Jika Anda tidak bergantung pada variabel global, Anda dapat melewati keadaan di antara berbagai fungsi sesuai kebutuhan. Dengan begitu, Anda memiliki peluang yang jauh lebih baik untuk memahami apa fungsi masing-masing, karena Anda tidak perlu memperhitungkan kondisi global.
Yang penting adalah mengingat tujuan keseluruhan: kejelasan
Aturan "tidak ada variabel global" ada di sana karena sebagian besar waktu, variabel global membuat makna kode kurang jelas.
Namun, seperti banyak aturan, orang ingat aturan itu, dan bukan apa aturan itu dimaksudkan untuk dilakukan.
Saya telah melihat program yang tampaknya menggandakan ukuran kode dengan melewatkan sejumlah besar parameter di sekitar hanya untuk menghindari kejahatan variabel global. Pada akhirnya, menggunakan global akan membuat program lebih jelas bagi mereka yang membacanya. Dengan mengikuti kata aturan tanpa berpikir, programmer asli telah gagal maksud aturan.
Jadi, ya, global sering kali buruk. Tetapi jika Anda merasa bahwa pada akhirnya, niat programmer dibuat lebih jelas dengan menggunakan variabel global, maka silakan. Namun, ingat kejernihan yang terjadi secara otomatis ketika Anda memaksa seseorang untuk mengakses potongan kode kedua (global) untuk memahami cara kerja potongan pertama.
Dosen saya biasa mengatakan sesuatu seperti: menggunakan variabel global tidak masalah jika Anda menggunakannya dengan benar. Saya pikir saya tidak pernah bisa menggunakannya dengan benar, jadi saya jarang menggunakannya sama sekali.
static
variabel global, bahasa C. Terbatas pada unit terjemahan yang relatif kecil, mereka mulai menyerupai variabel kelas objek C ++.
program lifetime, file scope variables
,. Dan mereka menjadi sangat global setelah Anda memberikan pointer ke variabel ke dunia luar (yang tidak mungkin dengan variabel otomatis) ..
static
Variabel global memiliki cakupan terbatas untuk unit terjemahan yang sama. Tetapi mereka memiliki seumur hidup sampai akhir program sebagai variabel global.
Variabel global hanya boleh digunakan ketika Anda tidak memiliki alternatif. Dan ya, itu termasuk lajang. 90% dari waktu, variabel global diperkenalkan untuk menghemat biaya melewati parameter. Dan kemudian multithreading / unit testing / maintenance coding terjadi, dan Anda memiliki masalah.
Jadi ya, dalam 90% situasi variabel global buruk. Pengecualian tidak akan terlihat oleh Anda di tahun-tahun kuliah Anda. Satu pengecualian yang bisa saya pikirkan adalah kepala saya berurusan dengan objek global yang inheren seperti tabel interupsi. Hal-hal seperti koneksi DB tampaknya bersifat global, tetapi tidak.
Masalah yang diciptakan variabel global untuk pemrogram adalah memperluas variabel antar-komponen permukaan antara berbagai komponen yang menggunakan variabel global. Ini artinya bahwa seiring meningkatnya jumlah komponen yang menggunakan variabel global, kompleksitas interaksi juga dapat meningkat. Peningkatan kopling ini biasanya membuat cacat lebih mudah untuk disuntikkan ke sistem ketika membuat perubahan dan juga membuat cacat lebih sulit untuk didiagnosis dan diperbaiki. Peningkatan kopling ini juga dapat mengurangi jumlah opsi yang tersedia saat membuat perubahan dan dapat meningkatkan upaya yang diperlukan untuk perubahan karena sering kali seseorang harus menelusuri berbagai modul yang juga menggunakan variabel global untuk menentukan konsekuensi dari perubahan.
Tujuan enkapsulasi , yang pada dasarnya kebalikan dari menggunakan variabel global, adalah untuk mengurangi kopling untuk membuat pemahaman dan mengubah sumber lebih mudah dan lebih aman dan lebih mudah diuji. Jauh lebih mudah untuk menggunakan pengujian unit ketika variabel global tidak digunakan.
Misalnya jika Anda memiliki variabel integer global sederhana yang sedang digunakan sebagai indikator yang disebutkan bahwa berbagai komponen digunakan sebagai mesin negara dan Anda kemudian membuat perubahan dengan menambahkan status baru untuk komponen baru, Anda kemudian harus menelusuri semua yang lain komponen untuk memastikan bahwa perubahan tidak akan memengaruhi mereka. Contoh masalah yang mungkin terjadi adalah jika switch
pernyataan untuk menguji nilai variabel global enumerasi dengan case
pernyataan untuk masing-masing nilai saat ini sedang digunakan di berbagai tempat dan kebetulan beberapa switch
pernyataan tidak memiliki default
kasus untuk ditangani. nilai tak terduga untuk global, tiba-tiba Anda memiliki perilaku yang tidak terdefinisi sejauh menyangkut aplikasi.
Di sisi lain, penggunaan area data bersama mungkin digunakan untuk berisi sekumpulan parameter global yang dirujuk di seluruh aplikasi. Pendekatan ini sering digunakan dengan aplikasi tertanam dengan jejak memori kecil.
Ketika menggunakan variabel global dalam aplikasi semacam ini biasanya tanggung jawab untuk menulis ke area data dialokasikan ke satu komponen dan semua komponen lainnya melihat area sebagai const
dan membaca darinya, tidak pernah menulis ke sana. Mengambil pendekatan ini membatasi masalah yang bisa berkembang.
Beberapa masalah dari variabel global yang perlu ditangani
Ketika sumber untuk variabel global seperti struct dimodifikasi, semua yang menggunakannya harus dikompilasi ulang sehingga semua yang menggunakan variabel tahu ukuran sebenarnya dan templat memori.
Jika lebih dari satu komponen dapat memodifikasi variabel global Anda dapat mengalami masalah dengan data yang tidak konsisten berada di variabel global. Dengan aplikasi multi-threading, Anda mungkin perlu menambahkan semacam penguncian atau wilayah kritis untuk memberikan cara sehingga hanya satu utas pada satu waktu dapat memodifikasi variabel global dan ketika utas memodifikasi variabel, semua perubahan selesai dan dilakukan sebelum utas lainnya dapat meminta variabel atau memodifikasinya.
Debugging aplikasi multi-utas yang menggunakan variabel global bisa lebih sulit. Anda dapat mengalami kondisi balapan yang dapat membuat cacat yang sulit untuk ditiru. Dengan beberapa komponen yang berkomunikasi melalui variabel global, terutama dalam aplikasi multi-ulir, dapat mengetahui komponen apa yang mengubah variabel kapan dan bagaimana itu mengubah variabel bisa sangat sulit untuk dipahami.
Nama clash bisa menjadi masalah dengan penggunaan variabel global. Variabel lokal yang memiliki nama yang sama dengan variabel global dapat menyembunyikan variabel global. Anda juga mengalami masalah konvensi penamaan saat menggunakan bahasa pemrograman C. Cara mengatasinya adalah membagi sistem menjadi sub-sistem dengan variabel global untuk sub-sistem tertentu yang semuanya dimulai dengan tiga huruf pertama yang sama (lihat ini untuk menyelesaikan tabrakan ruang nama pada tujuan C ). C ++ menyediakan ruang nama dan dengan C Anda dapat menyiasatinya dengan membuat struct yang dapat dilihat secara global yang anggotanya adalah berbagai item data dan penunjuk ke data dan fungsi yang disediakan dalam file sebagai statis karenanya dengan visibilitas file hanya sehingga mereka hanya dapat dirujuk melalui struct yang terlihat secara global.
Dalam beberapa kasus, niat aplikasi asli diubah sehingga variabel global yang menyediakan status untuk utas tunggal dimodifikasi untuk memungkinkan beberapa utas duplikat dijalankan. Contohnya adalah aplikasi sederhana yang dirancang untuk pengguna tunggal menggunakan variabel global untuk negara dan kemudian permintaan turun dari manajemen untuk menambahkan antarmuka REST untuk memungkinkan aplikasi jarak jauh untuk bertindak sebagai pengguna virtual. Jadi sekarang Anda harus menduplikasi variabel global dan informasi statusnya sehingga pengguna tunggal dan setiap pengguna virtual dari aplikasi jarak jauh memiliki variabel global mereka sendiri yang unik.
Menggunakan C ++ namespace
dan struct
Teknik untuk C
Untuk bahasa pemrograman C ++, namespace
arahan adalah bantuan besar dalam mengurangi kemungkinan bentrokan nama. namespace
bersama dengan class
dan berbagai kata kunci akses ( private
, protected
, dan public
) menyediakan sebagian besar perangkat yang diperlukan untuk variabel encapsulate. Namun bahasa pemrograman C tidak memberikan arahan ini. Posting stackoverflow ini, Namespaces di C , menyediakan beberapa teknik untuk C.
Teknik yang bermanfaat adalah memiliki area data residen memori tunggal yang didefinisikan sebagai struct
yang memiliki visibilitas global dan dalam hal ini struct
adalah petunjuk untuk berbagai variabel global dan fungsi yang diekspos. Definisi aktual dari variabel global diberikan lingkup file menggunakan static
kata kunci. Jika Anda kemudian menggunakan const
kata kunci untuk menunjukkan yang hanya baca, kompiler dapat membantu Anda untuk menegakkan akses hanya baca.
Menggunakan struct
teknik ini juga dapat merangkum global sehingga menjadi semacam paket atau komponen yang kebetulan global. Dengan memiliki komponen semacam ini, menjadi lebih mudah untuk mengelola perubahan yang memengaruhi fungsi global dan penggunaan global.
Namun sementara namespace
atau struct
teknik ini dapat membantu mengelola bentrokan nama, masalah mendasar dari penggabungan antar-komponen yang diperkenalkan oleh penggunaan global terutama dalam aplikasi multi-threaded modern, masih ada.
Variabel global sama buruknya dengan Anda membuatnya, tidak kurang.
Jika Anda membuat program yang sepenuhnya dienkapsulasi, Anda dapat menggunakan global. Adalah "dosa" untuk menggunakan global, tetapi memprogram dosa adalah filosofis.
Jika Anda memeriksa L.in.oleum , Anda akan melihat bahasa yang variabelnya hanya global. Ini tidak dapat dihilangkan karena semua perpustakaan tidak punya pilihan selain menggunakan global.
Yang mengatakan, jika Anda punya pilihan, dan dapat mengabaikan filosofi programmer, global tidak terlalu buruk.
Tidak juga Gotos, jika Anda menggunakannya dengan benar.
Masalah besar "buruk" adalah bahwa, jika Anda salah menggunakannya, orang-orang berteriak, mars lander crash, dan dunia meledak .... atau sesuatu seperti itu.
Ya, tetapi Anda tidak dikenakan biaya variabel global sampai Anda berhenti bekerja dalam kode yang menggunakan variabel global dan mulai menulis sesuatu yang lain yang menggunakan kode yang menggunakan variabel global. Tetapi biayanya masih ada.
Dengan kata lain, ini adalah biaya tidak langsung jangka panjang dan oleh karena itu kebanyakan orang berpikir itu tidak buruk.
Jika mungkin kode Anda akan berakhir di bawah tinjauan intensif selama persidangan Mahkamah Agung , maka Anda ingin memastikan untuk menghindari variabel global.
Lihat artikel ini: Kode breathalyzer Buggy mencerminkan pentingnya ulasan sumber
Ada beberapa masalah dengan gaya kode yang diidentifikasi oleh kedua studi. Salah satu masalah gaya yang menyangkut pengulas adalah penggunaan ekstensif variabel global yang tidak dilindungi . Ini dianggap sebagai bentuk yang buruk karena meningkatkan risiko bahwa keadaan program akan menjadi tidak konsisten atau bahwa nilai-nilai akan secara tidak sengaja dimodifikasi atau ditimpa. Para peneliti juga menyatakan beberapa kekhawatiran tentang fakta bahwa presisi desimal tidak dijaga secara konsisten di seluruh kode.
Saya yakin para pengembang itu berharap mereka tidak menggunakan variabel global!
Saya akan menjawab pertanyaan ini dengan pertanyaan lain: Apakah Anda menggunakan singeltons / Apakah singeltons buruk?
Karena (hampir semua) penggunaan singelton adalah variabel global yang dimuliakan.
Masalahnya kurang bahwa mereka buruk , dan lebih banyak lagi mereka berbahaya . Mereka memiliki serangkaian pro dan kontra, dan ada situasi di mana mereka bisa menjadi yang paling efisien atau satu-satunya cara untuk mencapai tugas tertentu. Namun, mereka sangat mudah disalahgunakan, bahkan jika Anda mengambil langkah untuk selalu menggunakannya dengan benar.
Beberapa kelebihan:
Beberapa kontra:
Perhatikan, jika Anda mau, bahwa dua pro pertama dan dua kontra pertama yang saya daftarkan adalah hal yang sama persis, hanya dengan kata-kata yang berbeda. Ini karena fitur-fitur variabel global memang bisa berguna, tetapi fitur-fitur yang membuat mereka berguna adalah sumber dari semua masalah mereka.
Beberapa solusi potensial untuk beberapa masalah:
Globals
atau GlobalVars
), atau gunakan konvensi penamaan standar untuk variabel global (seperti global_[name]
atau g_module_varNameStyle
(seperti yang disebutkan oleh underscore_d dalam komentar )). Ini akan mendokumentasikan penggunaannya (Anda dapat menemukan kode yang menggunakan variabel global dengan mencari namespace / nama struct), dan meminimalkan dampak pada namespace global.extern
di header yang terkait, sehingga penggunaannya dapat dibatasi untuk unit kompilasi yang perlu mengaksesnya. Jika kode Anda bergantung pada banyak variabel global, tetapi setiap unit kompilasi hanya membutuhkan akses ke beberapa variabel, Anda dapat mempertimbangkan untuk mengurutkannya menjadi beberapa file sumber, jadi lebih mudah membatasi akses setiap file ke variabel global.Apakah mereka baik atau buruk tergantung pada bagaimana Anda menggunakannya. Mayoritas cenderung menggunakannya dengan buruk, karena itu kewaspadaan umum terhadap mereka. Jika digunakan dengan benar, mereka bisa menjadi keuntungan besar; Namun, jika digunakan dengan buruk, mereka dapat dan akan kembali menggigit Anda kapan dan bagaimana Anda tidak mengharapkannya.
Cara yang baik untuk melihatnya adalah bahwa mereka sendiri tidak buruk, tetapi mereka memungkinkan desain yang buruk, dan dapat melipatgandakan efek dari desain yang buruk secara eksponensial.
Sekalipun Anda tidak bermaksud menggunakannya, lebih baik mengetahui cara menggunakannya dengan aman dan memilih untuk tidak menggunakannya daripada tidak menggunakannya karena Anda tidak tahu cara menggunakannya dengan aman. Jika Anda pernah menemukan diri Anda dalam situasi di mana Anda perlu mempertahankan kode yang sudah ada sebelumnya yang bergantung pada variabel global, Anda mungkin berada dalam kesulitan jika Anda tidak tahu bagaimana menggunakannya dengan benar.
g_module_varNameStyle
dapat dibaca dengan sempurna. Untuk lebih jelasnya, saya tidak menggunakan global jika saya dapat menghindarinya dengan mudah - kata kunci dengan mudah , karena sejak saya berhenti percaya mereka harus dihindari - atau lebih tepatnya dikaburkan - bagaimanapun caranya, saya memiliki waktu yang jauh lebih baik, & saya kode (kejutan!) jauh lebih rapi
Seperti kata seseorang (saya parafrase) di utas lain "Aturan seperti ini tidak boleh dilanggar, sampai Anda sepenuhnya memahami konsekuensi dari melakukannya."
Ada saat-saat ketika variabel global diperlukan, atau setidaknya sangat membantu (Bekerja dengan panggilan balik sistem misalnya). Di sisi lain, mereka juga sangat berbahaya karena semua alasan Anda diberitahu.
Ada banyak aspek pemrograman yang mungkin harus diserahkan kepada para ahli. Terkadang Anda MEMBUTUHKAN pisau yang sangat tajam. Tapi Anda tidak bisa menggunakannya sampai Anda siap ...
Variabel global umumnya buruk, terutama jika orang lain bekerja pada kode yang sama dan tidak ingin menghabiskan 20 menit mencari semua tempat variabel dirujuk. Dan menambahkan utas yang memodifikasi variabel membawa tingkat baru sakit kepala.
Konstanta global dalam ruang nama anonim yang digunakan dalam satu unit terjemahan baik-baik saja dan ada di mana-mana di aplikasi dan perpustakaan profesional. Tetapi jika data dapat diubah, dan / atau harus dibagi antara beberapa TU, Anda mungkin ingin merangkumnya - jika bukan karena desain, maka demi siapa pun yang men-debug atau bekerja dengan kode Anda.
Menggunakan variabel global adalah jenis seperti menyapu kotoran di bawah karpet. Ini adalah perbaikan cepat, dan jauh lebih mudah dalam jangka pendek daripada mendapatkan pengki atau penyedot debu untuk membersihkannya. Namun, jika Anda akhirnya memindahkan permadani nanti, Anda akan memiliki kejutan kejutan besar di bawahnya.
Saya pikir profesor Anda mencoba menghentikan kebiasaan buruk bahkan sebelum itu dimulai.
Variabel global memiliki tempat mereka sendiri dan seperti banyak orang mengatakan mengetahui di mana dan kapan menggunakannya bisa rumit. Jadi saya pikir daripada masuk ke seluk-beluk mengapa, bagaimana, kapan, dan di mana variabel global profesor Anda memutuskan untuk hanya melarang. Siapa tahu, dia mungkin akan mencekal mereka di masa depan.
Benar-benar tidak. Menyalahgunakan mereka ... itu buruk.
Melepaskan mereka tanpa berpikir demi itu hanya ... tanpa berpikir. Kecuali Anda mengetahui keuntungan dan kerugiannya, yang terbaik adalah menjauhi dan melakukan apa yang telah Anda pelajari / pelajari, tetapi secara implisit tidak ada yang salah dengan variabel global. Ketika Anda memahami pro dan kontra lebih baik membuat keputusan sendiri.
Variabel global baik-baik saja dalam program kecil, tetapi mengerikan jika digunakan dengan cara yang sama pada yang besar.
Ini berarti Anda dapat dengan mudah membiasakan menggunakannya saat belajar. Inilah yang profesor Anda coba lindungi dari Anda.
Ketika Anda lebih berpengalaman akan lebih mudah untuk belajar ketika mereka baik-baik saja.
Tidak, mereka tidak buruk sama sekali. Anda perlu melihat kode (mesin) yang dihasilkan oleh kompiler untuk membuat penentuan ini, kadang-kadang jauh lebih buruk untuk menggunakan lokal daripada global. Perhatikan juga bahwa menempatkan "statis" pada variabel lokal pada dasarnya menjadikannya global (dan menciptakan masalah jelek lainnya yang akan dipecahkan oleh global nyata). "global lokal" sangat buruk.
Global memberi Anda kontrol bersih atas penggunaan memori Anda juga, sesuatu yang jauh lebih sulit dilakukan dengan penduduk setempat. Hari-hari ini yang hanya penting di lingkungan tertanam di mana memori sangat terbatas. Sesuatu yang perlu diketahui sebelum Anda menganggap bahwa embedded adalah sama dengan lingkungan lain dan menganggap aturan pemrograman sama di seluruh papan.
Adalah baik bahwa Anda mempertanyakan aturan yang diajarkan, kebanyakan dari mereka bukan karena alasan Anda diberitahu. Namun, pelajaran yang paling penting bukanlah bahwa ini adalah peraturan yang harus Anda bawa selamanya, tetapi ini adalah aturan yang harus dihormati untuk lulus dari kelas ini dan bergerak maju. Dalam hidup Anda akan menemukan bahwa untuk perusahaan XYZ Anda akan memiliki aturan pemrograman lain yang pada akhirnya harus Anda hormati agar tetap mendapatkan gaji. Dalam kedua situasi itu Anda bisa memperdebatkan aturan itu, tetapi saya pikir Anda akan memiliki keberuntungan yang jauh lebih baik di pekerjaan daripada di sekolah. Anda hanyalah salah satu dari banyak siswa, kursi Anda akan segera diganti, profesor tidak akan, pada pekerjaan Anda adalah salah satu dari tim kecil pemain yang harus melihat produk ini sampai akhir dan dalam lingkungan yang dikembangkan aturan untuk manfaat dari anggota tim serta produk dan perusahaan, jadi jika semua orang berpikiran sama atau jika untuk produk tertentu ada alasan teknis yang baik untuk melanggar sesuatu yang Anda pelajari di perguruan tinggi atau buku tentang pemrograman generik, kemudian jual ide Anda kepada tim dan tuliskan sebagai metode yang valid jika bukan yang disukai . Semuanya adalah permainan yang adil di dunia nyata.
Jika Anda mengikuti semua aturan pemrograman yang diajarkan kepada Anda di sekolah atau buku, karier pemrograman Anda akan sangat terbatas. Anda mungkin dapat bertahan hidup dan memiliki karier yang subur, tetapi luas dan lebar lingkungan yang tersedia bagi Anda akan sangat terbatas. Jika Anda tahu bagaimana dan mengapa aturan itu ada dan dapat mempertahankannya, itu bagus, jika Anda satu-satunya alasan adalah "karena guru saya berkata begitu", well itu tidak begitu baik.
Perhatikan bahwa topik seperti ini sering diperdebatkan di tempat kerja dan akan terus berlanjut, karena penyusun dan pemroses (dan bahasa) berevolusi demikian juga aturan-aturan semacam ini dan tanpa mempertahankan posisi Anda dan mungkin diajarkan pelajaran oleh seseorang dengan pendapat lain yang tidak Anda sukai maju kedepan.
Sementara itu, maka lakukan saja apa yang dikatakan paling keras atau yang membawa tongkat terbesar berkata (sampai Anda yang berteriak paling keras dan membawa tongkat terbesar).
Saya ingin berdebat menentang poin yang dibuat di seluruh utas ini yang membuat multi-threading lebih sulit atau tidak mungkin dilakukan. Variabel global adalah keadaan bersama, tetapi alternatif untuk global (misal lewat pointer di sekitar) mungkin juga berbagi keadaan. Masalah dengan multi-threading adalah bagaimana cara menggunakan keadaan bersama dengan benar, bukan apakah keadaan itu terjadi bersama melalui variabel global atau sesuatu yang lain.
Sebagian besar saat Anda melakukan multi-threading, Anda perlu membagikan sesuatu. Dalam pola produsen-konsumen misalnya, Anda mungkin berbagi antrean aman yang berisi unit kerja. Dan Anda diizinkan untuk membagikannya karena struktur data itu aman digunakan. Apakah antrian itu bersifat global atau tidak, sama sekali tidak relevan ketika menyangkut keamanan utas.
Harapan tersirat yang dinyatakan dalam utas ini bahwa mengubah program dari satu-utas menjadi multi-utas akan lebih mudah bila tidak menggunakan global adalah naif. Ya, global membuat Anda lebih mudah menembak diri sendiri, tetapi ada banyak cara untuk menembak diri sendiri.
Saya tidak menganjurkan global, karena poin lainnya masih berdiri, poin saya hanyalah bahwa jumlah utas dalam suatu program tidak ada hubungannya dengan ruang lingkup variabel.
Ya, karena jika Anda membiarkan programmer yang tidak kompeten menggunakannya (baca 90% terutama ilmuwan), Anda akan mendapatkan lebih dari 600 variabel global yang tersebar di lebih dari 20 file dan proyek 12.000 baris di mana 80% dari fungsi tidak berlaku, kembali kosong, dan beroperasi sepenuhnya pada negara global.
Dengan cepat menjadi tidak mungkin untuk memahami apa yang sedang terjadi pada satu titik kecuali Anda tahu seluruh proyek.
Penggunaan variabel Global sebenarnya tergantung pada persyaratan. Keuntungannya adalah, ini mengurangi overhead melewati nilai-nilai berulang kali.
Tetapi profesor Anda benar karena menimbulkan masalah keamanan sehingga penggunaan variabel global harus dihindari sebanyak mungkin. Variabel global juga menciptakan masalah yang terkadang sulit untuk di-debug .
Sebagai contoh:-
Situasi ketika nilai-nilai variabel semakin dimodifikasi pada saat runtime . Pada saat itu sulit untuk mengidentifikasi bagian mana dari kode yang memodifikasi dan pada kondisi apa.
Global bagus untuk konfigurasi . Ketika kami ingin konfigurasi / perubahan kami memiliki dampak global pada seluruh proyek .
Jadi kita dapat mengubah satu konfigurasi dan perubahan diarahkan ke seluruh proyek . Tapi saya harus memperingatkan Anda harus sangat pintar untuk menggunakan global.
Cepat atau lambat Anda akan perlu mengubah cara variabel itu diatur atau apa yang terjadi ketika diakses, atau Anda hanya perlu mencari di mana itu diubah.
Secara praktis selalu lebih baik untuk tidak memiliki variabel global. Cukup tulis bendungan dapatkan dan atur metode, dan jadilah kelenjar saat Anda membutuhkannya sehari, seminggu atau sebulan kemudian.
Saya biasanya menggunakan global untuk nilai-nilai yang jarang berubah seperti lajang atau fungsi pointer ke fungsi di perpustakaan yang dimuat secara dinamis. Menggunakan global yang bisa berubah dalam aplikasi multithreaded cenderung mengarah ke sulit untuk melacak bug jadi saya mencoba untuk menghindari ini sebagai aturan umum.
Menggunakan global alih-alih menyampaikan argumen seringkali lebih cepat, tetapi jika Anda menulis aplikasi multithreaded, yang sering Anda lakukan saat ini, umumnya tidak berfungsi dengan baik (Anda dapat menggunakan thread-statika tetapi kemudian peningkatan kinerja dipertanyakan) .
Dalam aplikasi web dalam suatu perusahaan, dapat digunakan untuk menyimpan data khusus sesi / jendela / utas / pengguna di server untuk alasan pengoptimalan dan menjaga agar tidak kehilangan pekerjaan di mana koneksi tidak stabil. Seperti disebutkan, kondisi lomba perlu ditangani. Kami menggunakan satu instance kelas untuk informasi ini dan dikelola dengan hati-hati.
Pada akhirnya, program atau aplikasi Anda masih bisa berfungsi tetapi ini soal rapi dan memiliki pemahaman yang lengkap tentang apa yang terjadi. Jika Anda berbagi nilai variabel di antara semua fungsi, mungkin menjadi sulit untuk melacak fungsi apa yang mengubah nilai (jika fungsi melakukannya) dan membuat proses debug sejuta kali lebih sulit
keamanan kurang berarti setiap orang dapat memanipulasi variabel jika mereka dinyatakan global, untuk yang ini menjelaskan ambil contoh ini jika Anda memiliki saldo sebagai variabel global dalam program bank Anda fungsi pengguna dapat memanipulasi ini serta petugas bank juga dapat memanipulasi ini jadi ada masalah. hanya pengguna harus diberikan fungsi read only dan withdraw tetapi petugas bank dapat menambahkan jumlah ketika pengguna secara pribadi memberikan uang tunai di meja. ini adalah cara kerjanya
Dalam aplikasi multi-utas, gunakan variabel lokal sebagai pengganti variabel global untuk menghindari kondisi balapan.
Kondisi ras terjadi ketika beberapa utas mengakses sumber daya bersama, dengan setidaknya satu utas memiliki akses tulis ke data. Kemudian, hasil dari program tidak dapat diprediksi, dan tergantung pada urutan akses ke data dengan utas yang berbeda.
Lebih lanjut tentang ini di sini, https://software.intel.com/en-us/articles/use-intel-parallel-inspector-to-find-race-conditions-in-openmp-based-multithreaded-code