Saya sering melihat m_
awalan yang digunakan untuk variabel ( m_World
, m_Sprites
, ...) di tutorial, contoh dan kode lain terutama terkait dengan pengembangan game.
Mengapa orang menambahkan awalan m_
ke variabel?
hungarian-notation
kravemir
sumber
sumber
m_
, namun separuh tanggapan di sini adalah komentar mengapa semua orang menganggap favorit mereka saat ini adalah yang terbaik.Jawaban:
Ini adalah praktik pemrograman tipikal untuk mendefinisikan variabel yang merupakan variabel anggota. Jadi ketika Anda menggunakannya nanti, Anda tidak perlu melihat di mana mereka ditentukan untuk mengetahui ruang lingkup mereka. Ini juga bagus jika Anda sudah tahu ruang lingkup dan Anda menggunakan sesuatu seperti intelliSense , Anda bisa mulai dengan
m_
dan daftar semua variabel anggota Anda ditampilkan. Bagian dari notasi Hongaria, lihat bagian tentang cakupan dalam contoh di sini .sumber
m_
baik.Dalam Kode Bersih: Buku Panduan Pengerjaan Perangkat Lunak Agile ada rekomendasi eksplisit terhadap penggunaan awalan ini:
Ada juga contoh (kode C #) ini:
Praktik buruk:
Praktek yang baik:
Kami menghitung dengan konstruksi bahasa untuk merujuk variabel anggota dalam kasus eksplisit ambiguitas ( yaitu ,
description
anggota dandescription
parameter):this
.sumber
Ini adalah praktik umum dalam C ++. Ini karena di C ++ Anda tidak dapat memiliki nama yang sama untuk fungsi anggota dan variabel anggota, dan fungsi pengambil sering dinamai tanpa awalan "get".
"m_" menyatakan untuk "anggota". Awalan "_" juga umum.
Anda seharusnya tidak menggunakannya dalam bahasa pemrograman yang memecahkan masalah ini dengan menggunakan konvensi / tata bahasa yang berbeda.
sumber
The
m_
prefix sering digunakan untuk variabel anggota - saya pikir keunggulan utamanya adalah bahwa hal itu membantu menciptakan perbedaan yang jelas antara properti publik dan swasta variabel anggota backing itu:Ini dapat membantu untuk memiliki konvensi penamaan yang konsisten untuk variabel pendukung, dan
m_
awalan adalah salah satu cara untuk melakukan itu - yang berfungsi dalam bahasa yang tidak peka huruf besar-kecil.Seberapa bermanfaat hal ini tergantung pada bahasa dan alat yang Anda gunakan. IDE modern dengan alat refactor yang kuat dan intellisense memiliki sedikit kebutuhan untuk konvensi seperti ini, dan itu tentu saja bukan satu-satunya cara untuk melakukan ini, tetapi ada baiknya menyadari praktik dalam hal apapun.
sumber
this.
dalam bahasa Anda, makam_
itu benar-benar tidak berguna.m_
adalah untuk membedakannya dari properti yang didukungnya - jadithis.Something
untuk properti vsthis.m_something
untuk anggota pendukung. Ini bukan konvensi yang saya sukai, tetapi saya sering melihatnya menggunakan bahasa yang tidak sensitif (seperti VB).this.Something
untuk properti danthis.something
dukungan? Atauthis._something
untuk dukungannya?this.m_something
berlebihan. Saya menggunakan_something
sehingga saya tidak sengaja mengetiknya saat saya mengetikSomething
, tidak ada hubungannya dengan keanggotaan atau tidak_
awalan itu sendiri akan melakukan pekerjaan, tetapim_
konvensi. Itu bukan yang saya gunakan secara pribadi, tetapi jika Anda melihatnya dalam kode itu adalah maksud dari penulis.Seperti yang dinyatakan dalam jawaban lain,
m_
awalan digunakan untuk menunjukkan bahwa variabel adalah anggota kelas. Ini berbeda dari notasi Hongaria karena tidak menunjukkan jenis variabel tetapi konteksnya.Saya menggunakan
m_
dalam C ++ tetapi tidak dalam beberapa bahasa lain di mana 'ini' atau 'diri' adalah wajib. Saya tidak suka melihat 'ini->' digunakan dengan C ++ karena ini mengacaukan kode.Jawaban lain mengatakan
m_dsc
"praktik buruk" dan 'deskripsi;' adalah "praktik yang baik" tetapi ini adalah herring merah karena masalahnya ada singkatan.Jawaban lain mengatakan mengetik
this
IntelliSense muncul tetapi setiap IDE yang baik akan memiliki hotkey untuk memunculkan IntelliSense untuk anggota kelas saat ini.sumber
m_description
vsdescription
.Seperti yang dinyatakan dalam banyak respons lain, m_ adalah awalan yang menunjukkan variabel anggota. Ini adalah / biasa digunakan di dunia C ++ dan disebarkan ke bahasa lain juga, termasuk Java.
Dalam IDE modern, hal itu sepenuhnya berlebihan karena penyorotan sintaksis membuatnya menjadi bukti variabel mana yang lokal dan mana yang anggota . Namun, pada saat penyorotan sintaksis muncul di akhir 90-an, konvensi telah ada selama bertahun-tahun dan telah ditetapkan dengan kuat (setidaknya di dunia C ++).
Saya tidak tahu tutorial mana yang Anda maksud, tapi saya kira mereka menggunakan konvensi karena salah satu dari dua faktor:
sumber
Lockheed Martin menggunakan skema penamaan 3-awalan yang bagus untuk dikerjakan, terutama ketika membaca kode orang lain.
Begitu...
Ambillah untuk apa nilainya.
sumber
Untuk menyelesaikan jawaban saat ini dan karena pertanyaannya tidak spesifik bahasa, beberapa proyek-C menggunakan awalan
m_
untuk mendefinisikan variabel global yang spesifik untuk file - dang_
untuk variabel global yang memiliki cakupan lebih besar dari file yang mereka tetapkan.Dalam hal ini variabel global yang didefinisikan dengan awalan
m_
harus didefinisikan sebagaistatic
.Lihat konvensi pengkodean EDK2 (implementasi Open-Source UEFI) untuk contoh proyek yang menggunakan konvensi ini.
sumber
Satu argumen yang belum saya lihat adalah bahwa awalan seperti itu
m_
dapat digunakan untuk mencegah perselisihan nama dengan#define
'd macro's.Regex mencari
#define [a-z][A-Za-z0-9_]*[^(]
masuk/usr/include/term.h
dari kutukan / ncurses.sumber