Saya menanyakan pertanyaan ini beberapa waktu yang lalu: Bagaimana Anda memberi nama variabel pribadi Anda di C #?
Dalam salah satu jawaban, saya diarahkan ke halaman MSDN Microsoft yang menunjukkan bahwa variabel / bidang pribadi harus dinamai seperti ini:
private int myInteger;
Tetapi parameternya adalah:
void SomeMethod(int myInteger)
dan variabel lokal akan seperti ini:
int myInteger;
Jadi ketika Anda mereferensikannya seperti ini
myInteger = 10;
Anda tidak memiliki cara untuk mengetahui mana yang sedang Anda bicarakan.
Saya sekarang memulai proyek baru dan salah satu rekan kerja saya bertanya mengapa kami tidak melakukan sesuatu untuk membedakan setidaknya beberapa dari ini.
Saya bertanya-tanya hal yang sama. Mengapa standar Microsoft tidak membuat ini berbeda?
.net
coding-standards
naming
Gunung berapi
sumber
sumber
this.
.this.component = component
). Jika Anda menemukan diri Anda dengan lingkup ambigu di tempat lain, sehingga Anda memiliki "banyak yang berlebihan ini." tersebar di sekitar kode Anda ", maka Anda memiliki kode yang ditulis dengan buruk.Jawaban:
Konvensi penamaan asli memiliki awalan m_ untuk anggota kelas, ini dikurangi menjadi garis bawah sederhana. Anda akan melihat banyak kode Microsoft C # yang lebih lama menggunakan awalan garis bawah. Namun, saya pernah mendengar di Tech Ed bahwa garis bawah utama tidak sesuai dengan CLS. Saya berasumsi inilah alasan mengapa mereka pindah ke skema satu nama yang cocok untuk semua. Dulu (tidak yakin sekarang) bahwa nama tidak sensitif case VB.Net juga tidak sesuai CLS.
Untuk apa nilainya, saya masih menggunakan garis bawah terkemuka untuk anggota kelas. Meskipun Anda dapat disambiguasi menggunakan this (this.name sebagai kebalikan dari nama), bug masih bisa menembus
Anda tidak harus melakukan semua yang diminta oleh MS.
sumber
protected
, bukanprivate
local
danparameter
variabel diberi nama dengan cara yang sama karena cakupannya samaAdapun variabel pribadi, ada pendapat berbeda tentang itu. Saya selalu menggunakan standar yang ditemukan di sini , yang menspesifikasikan untuk menggunakan yang terdepan
_
sebelum variabel pribadi, meskipun penulis mengatakan bahwa_
itu agak kontroversial dan Microsoft merekomendasikan untuk tidak melakukannya.Wikipedia menyatakan bahwa dalam C dan C ++
jadi mungkin itulah alasan di balik Microsoft merekomendasikan hal itu, meskipun cukup diketahui bahwa banyak Microsoft devs menggunakan
_
awalan untuk variabel pribadi mereka.sumber
this
pasti mengacu pada objek saat ini. Saya tidak mengerti kebencianthis
. Apakah itu karena disalahpahami?Saya tidak bisa memberi tahu Anda dengan pasti mengapa mereka tidak membuat mereka berbeda. Kemungkinan tidak ada yang bisa kecuali seseorang yang ikut menciptakan standar terjadi untuk melihat pertanyaan ini.
Banyak orang membuat konvensi mereka sendiri dengan memberi awalan variabel instan dengan
_
ataum_
, tetapi saya benar-benar tidak menganggapnya penting. Anda dapat menyimpulkan banyak dari konteks dan IDE hari ini cukup pintar untuk membantu Anda. Visual Studio dengan addon ReSharper, misalnya, akan menunjukkan kepada Anda variabel lokal dan variabel instan dalam berbagai warna.Jika benar-benar penting bahwa Anda membedakan antara dua cakupan, Anda bisa menggunakan
this.
awalan untuk merujuk ke variabel instance:Tanpa plugin lain, Visual Studio secara default akan membantu Anda dengan Intellisense:
(Munculan mungkin masih ditata oleh ReSharper di sana, tetapi ReSharper tidak menambahkan apa pun ke fitur-fitur Intellisense bawaan, jadi sementara stok yang mungkin terlihat sedikit berbeda, masih ada dua opsi di sana. )
Anda juga dapat menggunakan alat analisis kode seperti FxCop dan StyleCop untuk membantu Anda menangkap masalah potensial dengan penamaan dan ruang lingkup variabel.
sumber
this
, saya selalu lebih sukathis
, karena pasti mengacu pada contoh saat ini di rumah apa pun Anda berada, jadi itu tepat. Konvensi garis bawah atau garis bawah adalah hanya itu - konvensi yang mungkin atau mungkin tidak merujuk ke variabel instan dan dibuat berlebihan olehthis
. Satu-satunya tempat yang saya lihat garis bawah berguna dalam VB case-insensitive untuk membedakan nama objek dan kelas. Tapi itu adalah cerita lain.Orang-orang di Microsoft menulis sebuah buku berjudul Kerangka Desain Pedoman yang menjelaskan sejumlah konvensi, termasuk mengapa beberapa hal dijadikan unta , dan yang lainnya dilakukan pascal .
Edit (menambahkan detail dari buku):
Dalam buku itu, mereka menyebutkan melakukan studi kegunaan, serta beberapa pelajaran yang didapat dari mengakuisisi kelompok Turbo Pascal. Selain itu, meskipun tidak semua bahasa peka terhadap huruf besar-kecil (seperti VB), bahasa lainnya (seperti C #), jadi seseorang harus konsisten dalam penamaannya. Seseorang tidak dapat bergantung pada perbedaan dalam kasus saja untuk membedakan item. Jika seseorang tetap pada konvensi yang digunakan oleh sisa kerangka kerja, itu akan menyebabkan lebih sedikit kebingungan oleh para dev.
Bab 3, Pedoman Penamaan.
Bagian 3.1 adalah konvensi kapitalisasi.
camelCasing
adalah untuk nama parameter.PascalCasing
adalah untuk namespace, tipe dan nama anggota. Jika ada akronim 2 huruf sebagai bagian dari nama, pertahankan huruf kapital bersama-sama, sepertiIOStream
.Bagian 3.5 mencakup kelas penamaan, struct dan antarmuka.
Bagian 3.6 mencakup penamaan tipe anggota.
Bagian 3.7 mencakup parameter penamaan.
sumber
Karena mereka dapat dibedakan karena tergantung pada konteks tempat mereka ditulis.
Misalnya, apakah Anda pernah menggunakan parameter sebagai variabel anggota? Atau variabel lokal sebagai parameter? Bagaimana dengan variabel anggota sebagai variabel lokal?
Semua variabel anggota berada di "tubuh" kelas. Saya benar-benar tidak membeli argumen yang Anda perlu awali anggota ketika Anda dapat menggunakannya
this
untuk membedakannya dari variabel lokal dengan nama yang mirip, kalau tidak, itu tidak diperlukan.Variabel lokal juga hanya didefinisikan di dalam lingkup metode atau dalam lingkup blok kode.
Parameter selalu didefinisikan dalam tanda tangan metode.
Jika Anda membuat semua jenis variabel ini bingung atau tercampur bersama, maka Anda benar-benar harus lebih memikirkan desain kode Anda agar lebih mudah dibaca atau ditemukan. Beri mereka nama deskriptif yang lebih baik dan lebih mandiri daripada
myInteger
.sumber
Saya tidak dapat menjawab pertanyaan Anda tentang standar Microsoft. Jika Anda ingin standar untuk membedakan hal-hal ini, standar yang saya gunakan untuk parameter PL / SQL adalah awalan nama parameter dengan
in_
,out_
,io_
, untuk parameter in, out, dan di-out. Variabel yang bersifat lokal ke suatu fungsi diawali dengan av_
.sumber
Sebagian besar perusahaan yang saya kenal memiliki standar pengkodean yang menentukan baik garis bawah atau huruf kecil m (untuk "anggota" saya anggap) sebagai awalan untuk variabel anggota mereka.
Begitu
_varName
atau
mVarName
sumber
Seperti yang telah ditunjukkan orang lain, Anda biasanya dapat mengetahui mana yang pada lingkup mana item tersebut digunakan. Anda sebenarnya tidak dapat memiliki parameter dan variabel lokal dalam cakupan yang sama dan jika Anda ingin variabel pribadi, cukup gunakan this.myInteger. Jadi saya tidak berpikir Microsoft terlalu khawatir tentang hal itu karena Anda dapat dengan mudah membedakan di antara mereka jika Anda mau.
Tapi itu dikatakan, saya sedikit terkejut bahwa belum ada yang mengatakan ini, tapi lupakan Microsoft dan konvensi penamaan mereka (mungkin seseorang sudah mengatakannya sekarang karena saya harus lari ke sebuah pertemuan dan membiarkannya terbuka tanpa mengajukan Itu). Notasi Hungaria juga merupakan konvensi penamaan yang dimulai di Microsoft (atau itu Xerox? Saya tidak pernah bisa mengingat kapan Simonyi datang dengan itu). Saya tidak bisa memikirkan siapa pun yang saya tahu yang tidak mengutuk nama notasi Hongaria hingga hari ini. Kami menjadi sangat terganggu dengan hal itu di tempat saya bekerja sehingga kami membuat standar kami sendiri yang kami gunakan secara internal. Itu lebih masuk akal bagi kami dan mempercepat pekerjaan kami (sebenarnya cukup dekat dengan apa yang disarankan Microsoft sekarang, tetapi semuanya merupakan kasus pascal dengan pengecualian variabel pribadi).
Yang sedang berkata, standar baru yang digunakan Microsoft (campuran camel case dan pascal case) tidak terlalu buruk. Tetapi jika Anda dan rekan kerja Anda tidak menyukainya, buatlah standar Anda sendiri (secara kolektif adalah yang terbaik). Ini tentu saja tergantung pada apakah perusahaan Anda sudah memiliki standar atau tidak. Jika ya, patuhi mereka. Kalau tidak datang dengan apa yang bekerja untuk Anda dan rekan kerja Anda. Tetap logis. '
Karena Aaronaught meminta kutipan tentang Charles Simonyi dan Notasi Hongaria: http://en.wikipedia.org/wiki/Charles_Simonyi
http://en.wikipedia.org/wiki/Hungarian_notation
http://msdn.microsoft.com/en-us/library/aa260976(v=VS.60).aspx
http://ootips.org/hungarian-notation.html
http://www.hitmill.com/programming/vb/Hungarian.html
http://web.mst.edu/~cpp/common/hungarian.html
Dua yang terakhir hanyalah contoh dari notasi Hongaria dan tautan ootips hanyalah beberapa kutipan mengenai beberapa pendapat tentang subjek tersebut. Perhatikan bahwa ada juga sistem Notasi Hongaria tetapi yang juga, sejauh yang saya ketahui, menjadi populer dari pemrogram Microsoft (meskipun tidak seperti Simonyi untuk variasi aplikasi, saya tidak tahu siapa).
sumber