Kecuali diperlukan untuk membedakan antara variabel dan bidang dengan nama yang sama, saya tidak pernah meletakkan this.
di depan bidang atau akses anggota dalam C #. Saya melihat ini tidak ada bedanya dengan m_
awalan yang dulu biasa di C ++, dan berpikir jika Anda benar-benar perlu menentukan bahwa itu adalah anggota, kelas Anda terlalu besar.
Namun, ada sejumlah orang di kantor saya yang sangat tidak setuju.
Apa yang dianggap praktik terbaik saat ini this.
?
EDIT: Untuk memperjelas, saya tidak pernah menggunakan m_
dan hanya menggunakan this.
jika benar-benar diperlukan.
c#
coding-style
Andy Lowry
sumber
sumber
m_
seharusnya berarti?this.
hampir sama buruknya dengan m_.Jawaban:
Menurut pedoman desain Kerangka , ketika merujuk ke bidang publik atau yang dilindungi:
Misalnya,
m_
adalah awalan.Jadi, paparan publik bidang cocok untuk penggunaan
this
kata kunci seperti yang dijelaskan pada MSDNSaat merujuk ke bidang pribadi, Anda dapat menggunakan
m_
jika Anda mau. Tapi, untuk bidang publik saya sarankan mengikuti praktik terbaik.Secara pribadi, saya tidak suka garis bawah pada nama variabel saya. Saya juga berusaha konsisten. Jadi,
this.name = name;
adalah aturan praktis yang baik untuk bekerja dalam skenario publik / swasta.sumber
m_
awalan. Saya pikir '_' adalah awalan yang baik karena Anda tidak pernah khawatir tentang masalah stackoverflow dari kesalahan pengerjaan tugasDi tim kami, kami telah mengadopsi standar penggunaan objek
this.
atauMe.
kualifikasi di kelas yang lebih besar untuk membantu pengembang junior lebih mudah membedakan ruang lingkup variabel langsung / langsung hanya dengan melihatnya.Dari segi kode, ini sepenuhnya merupakan pengaruh yang tidak perlu, tetapi tidak menghalangi apa pun karena ia menghasilkan kode MISL yang persis sama pada akhirnya. Kami mengadopsinya hanya karena itu mengatasi masalah langsung yang kami temukan dengan beberapa junior. Di luar itu, saya tidak melihatnya membantu untuk memasukkannya.
sumber
StyleCop akan menegakkan penggunaan
this.
Jadi, jika Anda menganggap itu sebagai praktik terbaik (yang saya lakukan), maka penggunaanthis.
praktik terbaik adalah.Gaya yang Anda adopsi terserah Anda dan standar pengkodean Anda sendiri, "terbaik" adalah apa pun yang Anda tetapkan. Bersikaplah konsisten. Menggunakannya secara tidak konsisten hanya menimbulkan kebingungan.
Alasan saya adalah bahwa menggunakan
this.
memanggil fakta bahwa Anda mereferensikan properti instance, jadi, misalnya, akan membantu untuk menyoroti fakta bahwa Anda memutasikannya (jika sudahthis.x = ...
), yang merupakan sesuatu yang mungkin ingin Anda ketahui. Ini juga menyoroti fakta bahwa setiap kali Anda melihatthis.
metode Anda tidak akan pernah statis. Menggunakan beberapa konvensi sepertim_
juga akan melakukan ini, tetapi ini adalah upaya manual, jika Anda membuatm_
menjadi statis, atau refactor beberapa metode untuk meneruskan nilai dari luar kelas maka Anda harus ingat untuk mengubah nama, jika Anda menggunakanthis
maka kompiler akan memaksa Anda untuk melakukan perubahan.Sederhananya menggunakan
this
lebih mudah karena jika Anda salah kode Anda tidak akan dikompilasi, jika Anda menggunakannyam_
adalah upaya manual dan Anda tidak memanfaatkan alat.sumber
Salah satu hal yang menyenangkan tentang penggunaan
m_
adalah bahwa begitu Anda mengetikm
intellisense kecil memberi Anda daftar semua variabel pribadi Anda, secara pribadi saya pikir itu merupakan nilai tambah dalam bantuan itu; Saya juga akan menggunakans_
statika pribadi danc_
konstanta pribadi untuk alasan yang sama. Ini adalah notasi Hungaria, tetapi dalam arti ini dimaksudkan karena ia menambah makna yang berguna untuk nama variabel sehingga setiap programmer lain dapat mengatakan hal-hal tentang itu dari namanya yang mungkin tidak sepenuhnya jelas.Saya tentu saja tidak setuju dengan tidak memiliki cara untuk membedakan antara variabel anggota dan variabel non-anggota karena mereka berbeda dan ketika saya membaca kode di mana orang tidak melakukan sesuatu untuk menghancurkan itu benar-benar sulit untuk dibaca. Menggunakan
this.
hanya terasa seperti lebih banyak pelat ketel daripada yang diperlukan. Tapi sebenarnya itu adalah selera pribadi, jika Anda kode satu cara untuk sementara waktu Anda akhirnya berpikir itu benar dan yang lainnya salah. Satu-satunya hal yang benar-benar penting jika skema itu waras adalah semua orang di tim konsisten.sumber
this.
dan biarkan intellisense membantu Anda.this.
akan memberi Anda segala sesuatu di kelas tanpa perlu menggunakan konvensi penamaan yang ketinggalan zaman. Saya mengerti maksud dari berbagai surat, saya hanya berpikir itu tidak perlu. Jika Anda memiliki begitu banyak properti, konstanta dll dalam satu kelas yang Anda butuhkan konvensi ini maka desain Anda cukup banyak rusak.m_
akan memberi saya daftar semua variabel anggota. Mengetikthis.
akan memberi saya daftar variabel anggota dan fungsi anggota.this
eksplisit. Ini adalah tanda optik yang tidak bisa Anda lewatkan.Saya hampir selalu lebih suka kode eksplisit daripada kode implisit. Itu sebabnya saya
this
sering menggunakan . Saya menganggapnya sebagai praktik terbaik.sumber
Saya selalu menggunakan "ini". Alasannya didasarkan pada dua fakta sederhana:
Penggunaan "ini" membuatnya cukup eksplisit bagi siapa pun yang membaca (yaitu bukan hanya penulis, tetapi dapat memasukkan penulis dalam waktu 6 bulan setelah spesifikasi implementasi telah sepenuhnya dilupakan) bahwa ya, ini adalah anggota kelas yang kami ' sedang berbicara tentang di sini. "m_" dan sejenisnya hanyalah sebuah konvensi, dan seperti konvensi lainnya, konvensi ini dapat disalahgunakan (atau tidak digunakan sama sekali) - tidak ada yang dapat menegakkan "m _" / etc pada saat kompilasi atau run-time. "this" lebih kuat: Anda bisa meletakkan "m_" pada variabel lokal dan kompiler tidak akan mengeluh; Anda tidak dapat melakukannya dengan "ini".
Jika ada yang saya anggap menyesal bahwa penggunaan "ini" tidak diwajibkan dalam spesifikasi bahasa.
Sebagai bonus yang bagus, saat men-debug Anda dapat mengarahkan (atau menambahkan jam tangan) "ini" dan mendapatkan inspeksi dari semua anggota kelas lainnya juga - informasi yang berharga.
sumber
Kata
this
kunci digunakan terutama untuk membedakan 2 variabel yang ada, terutama ketika melakukan Anda memiliki konstruktor atau metode dengan variabel dengan nama yang sama tetapi dapat memiliki jenis yang sama.Contoh:
Ini (misalnya
this.reason = reason
) pada dasarnya memberikan nilai dari parameter ke variabel di kelas.this
pada dasarnya mengambil kelasreason
dari blok parameter.sumber
Saya juga bertanya-tanya tentang hal itu selama beberapa waktu. Setelah melakukan beberapa pengkodean yang luas dalam javascript, saya
this.
lebih sering menggunakan kode c # saya (sebelum itu saya menggunakannya hampir secara eksklusif dalam konstruktor atau metode serupa untuk menghindari ambiguitas). Itu membuat kode sedikit lebih jelas untuk sedikit usaha tambahan, apalagi Anda tidak berakhir memutilasi nama anggota kelas Anda dengan awalan dan masih dapat kembali menggunakan anggota 'jalan pintas' ketika konteksnya jelas atau dalam pernyataan yang sangat kompleks. Saya hanya menambahkanthis.
, ketika saya memiliki metode yang lebih panjang, daftar argumen yang lebih panjang atau banyak variabel lokal yang dideklarasikan dan saya pikir kode tersebut dapat mengambil keuntungan dari beberapa kejelasan tambahan, bahkan jika itu dipaksakan.Tapi saya pribadi sangat membenci
m_
gaya awalan, bukan karena Hongaria, tetapi karena garis bawah adalah rasa sakit untuk mengetik;) Jadi saya tidak menganggapnya sebagai alternatif. Saya akui itu memiliki poin kuat dalam hal intellisense, namun Anda dapat kembali berargumen bahwa jika Anda tidak dapat mengingat beberapa huruf pertama dari variabel anggota, kelas Anda terlalu besar.sumber
Saya memilih awalan garis bawah tunggal untuk anggota kelas. _someVar;
Mengapa? Anda tahu pada awalnya glace bahwa itu adalah anggota, bukan variabel tumpukan. Hanya kenyamanan selama sekilas. Dan itu membutuhkan lebih sedikit kekacauan dibandingkan dengan kata kunci "ini".
sumber
Menggunakan hal-hal seperti
this.
awalan / kata kunci yang tidak perlu atau mengubah hasilnya selalu subjektif. Namun, saya pikir kita dapat setuju bahwa sebagian besar dari kita ingin membedakan bidang dari variabel lokal. Beberapa menggunakan awalan garis bawah (yang saya temukan jelek dan semacam notasi Hungaria), yang lain menggunakanthis.
kata kunci. Saya salah satunya. Ini semua hanya tentang keterbacaan dan pemahaman. Saya tidak keberatan mengetik sedikit ekstra jika lebih jelas atau lebih mudah dibaca. Saya ingin membedakan bidang dan variabel dalam sekejap mata.Saya selalu mendefinisikan bidang bernama mirip
myField
dan nama parameter dan nama variabel lokal juga mirip denganmyField
. Tidak ada garis bawah, tidak ada awalan. Saya menggunakan dithis
mana saja saya merujuk ke suatu bidang. Dengan cara ini saya bisa membedakan bidang dari variabel dan argumen lokal tanpa awalan apa pun. Tentu saja, dalam kasus seperti ini,this
kata kunci diperlukan:Karena itu, properti saya terlihat seperti ini (ya, saya selalu meletakkan bidang dengan properti, dan bukan di tempat yang tidak terkait di bagian atas file saya):
Bunyinya bagus: kembalikan nama depan ini .
sumber
EDIT: Jawaban saya jelas bukan jawaban. Jadi di sini adalah hasil edit. Status pedoman pengkodean Microsoft:
Dapat ditemukan di: http://blogs.msdn.com/b/brada/archive/2005/01/26/361363.aspx
Jadi akan terlihat bahwa setidaknya dari MS tidak ada pedoman yang jelas, meskipun jawaban lain menyatakan bahwa StyleCop membuatnya menjadi pedoman. Tidak ada wewenang untuk hal-hal ini, jadi saya sarankan Anda mengambil keputusan sendiri, atau dalam hal ini menyerah kepada tim Anda. Ini bukan masalah besar.
Jawaban asli saya, saya pribadi setuju dengan Anda, tetapi mungkin tes pemahaman membaca mengadu dua metode terhadap satu sama lain akan berharga. Kalau tidak, hal-hal gaya ini hanya mudslinging.
Salvo saya untuk mengikuti: Pendapat saya adalah bahwa orang tidak perlu memperumit gaya kode mereka, dan jika mereka perlu menunjukkan bahwa ada sesuatu yang merupakan variabel tingkat kelas mungkin ada beberapa masalah struktural serius lainnya dalam kode, seperti metode resep kuno yang sudah ada. menempatkan variabel pribadi di bagian atas kelas yang memaksa Anda untuk terus-menerus menggulir ke atas dan ke bawah.
ini mengejutkan saya sebagai salah satu dari konvensi penamaan "apa ini" versus konvensi yang benar "apa fungsinya". Singkatnya harus disukai di atas menjadi eksplisit. Ini adalah pelajaran yang sering diulang dengan bahasa dinamis. Kami tidak membutuhkan semua bulu-bulu!
sumber
ini. Sering dapat menyebabkan kebisingan yang tidak diinginkan.
Inilah solusi saya:
sumber