Apa penamaan Konvensi yang Digunakan untuk Parameter Fungsi C #

14

Ada situasi ketika nama yang dilewatkan dalam Parameter akan dimasukkan ke tipe baru, tetapi nama objek Lulus harus tetap serupa. Untuk kasus Class Attributes, kita dapat menggunakan operator ini, tetapi bagaimana dengan variabel lokal dalam fungsi. Konvensi kode apa yang banyak digunakan.

contoh,

void MyFunc(BaseClass myPara)
{
  DerivedClass _mypara = (BaseClass)myPara;
}

atau sebaliknya

void MyFunc(BaseClass _myPara)
{
  DerivedClass mypara = (BaseClass)_myPara;
}

atau konvensi lainl

Shamim Hafiz
sumber
1
Apa pun jawaban lain yang Anda dapatkan di bawah, ada alat kecil untuk menganalisis dan menegakkan aturan gaya: arsip.msdn.microsoft.com/sourceanalysis
Patrick Hughes

Jawaban:

11

Awalan baik parameter atau variabel lokal dengan garis bawah tidak terlalu idiomatis dalam C #, itu tidak terlalu mudah dibaca dan tidak sering digunakan (meskipun legal, jadi Anda bebas melakukannya jika Anda mau).

Nama terbaik untuk parameter dan variabelnya adalah nama deskriptif. Anda perlu berpikir mengapa Anda mengubah jenisnya, apa alasan para pemerannya. Maka Anda harus dapat membuat 2 nama berbeda. Misalnya, Anda melewati "orang" dan mengubahnya menjadi "pelanggan" maka Anda dapat menggunakan orang dan / atau pelanggan dalam nama variabel mungkin.

Jika Anda benar-benar tidak dapat memikirkan 2 nama yang berbeda maka saya akan menggunakan "sebagai" dalam nama ( ada pertanyaan di situs ini beberapa hari yang lalu tentang ini ). Misalnya Anda akan menggunakan "myParaAsDerived" untuk variabel lokal.

Jika mungkin saya tidak akan menggunakan ini, saya akan berpikir keras tentang masalah yang Anda pecahkan dan nama-nama yang berarti apa yang dapat digunakan, tetapi jika semuanya gagal ini cukup mudah dibaca.

Steve
sumber
Hanya periksa ulang (saya tidak familiar dengan C #). Garis bawah utama benar-benar legal di C #? Di C dan C ++, pengidentifikasi dengan garis bawah memimpin (atau dua kali lipat) dicadangkan, jadi meskipun mereka legal dalam arti tertentu, Anda tidak boleh mendefinisikan pengidentifikasi Anda sendiri seperti itu. csharp.comsci.us/etymology/identifiers.html menyarankan C # mungkin serupa (lihat bagian bawah, terakhir dari "batasan") tetapi tidak benar-benar mengatakan "dicadangkan".
Steve314
memimpin underscor benar-benar legal di C # dan tidak dilindungi oleh konvensi yang saya tahu.
Steve
9

Pertama menggunakan

void MyFunc(BaseClass _myPara)
{
} 

Jelas salah! Karena banyak standar pengkodean c # menggunakan awalan “_” pada semua nama bidang ! Kode Anda harus mudah dipahami oleh programmer lain sehingga kode tidak boleh ditulis dengan cara yang akan menyesatkan banyak programmer C #.

Mengingat semua manfaat metode kecil, saya pribadi tidak melihat perlunya konvensi penamaan untuk memisahkan variabel lokal dari parameter. Jika metode Anda memiliki begitu banyak parameter dan variabel lokal sehingga Anda tidak dapat mengetahui apa yang sedang terjadi tanpa konvensi penamaan Anda memiliki masalah yang lebih besar. (Ini tercakup dengan baik dalam Clean Code Book , sebuah buku Java tapi saya masih merasakan manfaatnya sebagai programmer C #)

Ian
sumber
4

Jika Anda ingin awalan mereka dengan sesuatu maka Anda harus menggunakan p_untuk parameter: secara umum saya kira Anda mungkin akan mengganggu banyak orang jika Anda melakukan ini. TETAPI konsisten, jangan hanya melakukannya di satu tempat hanya karena Anda memerlukan dua nama berbeda untuk variabel yang ingin Anda beri nama yang sama.

Aturan umum yang baik dengan penamaan variabel berjalan seperti;

  • Jika Anda hanya memiliki satu jenis nama objek dengan fungsinya:

    var builder = new PizzaBuilder();
  • Jika Anda memiliki lebih dari satu nama dengan fungsi dan spesialisasi mereka:

    var pizzaBuilder = new PizzaBuilder();
    var milkShakeBuilder = new MilkShakeBuilder();

sumber
P_ (atau hanya p) untuk parameter adalah konvensi lama yang telah banyak digunakan dalam C ++ dan C. Cenderung untuk pergi dengan l_ untuk lokal dan (dalam C ++) m_ untuk variabel anggota. Saya sudah melihatnya di Pascal, Modula 2 dan Ada juga, jadi itu bukan hanya hal keluarga C. Ini adalah agak cinta-itu-atau-benci-itu, meskipun. Saya telah menggunakannya hampir secara obsesif, alasan saya Steve Haighs beralasan untuk "As". Misalnya metode setter sering dilakukan m_Whatever = p_Whatever;- memberikan dua pengidentifikasi bermakna nama yang berbeda akan canggung. Tetapi saya sudah mulai mempertanyakan apakah kasus-kasus itu cukup umum untuk membenarkan konvensi yang konsisten.
Steve314
4

Konvensi penamaan C # akan membuat Anda:

  • Menggunakan PascalCasing untuk metode, properti publik, dan nama kelas
  • Menggunakan IPascalCasing (perhatikan I di awal) untuk nama antarmuka
  • Menggunakan camelCasing untuk parameter metode dan variabel lokal
  • Menggunakan _underscoredCamelCasing untuk bidang pribadi kelas lebar

Dan tolong menjauh dari notasi hungaria. Tidak ada gunanya dan tidak mematuhi konvensi C #.

Matteo Mosca
sumber
bidang pribadi pascal-cased jika mereka statis.
Sara
2

Menggarisbawahi dalam penamaan variabel bisa agak tidak perlu karena kami memiliki kata kunci "ini" untuk merujuk ke variabel tingkat kelas secara khusus. Jika Anda ingin mempelajari lebih lanjut tentang konvensi penamaan variabel dari para ahli, saya sarankan Anda melihat pada makalah terkenal yang disebut "Aturan Ottinger untuk Penamaan Variabel dan Kelas" oleh Tim Ottinger, sebuah artikel yang didukung oleh mentor kode bersih Robert C. Martin .

Ottinger menyatakan bahwa kode Anda harus tetap dapat dibaca secara manusiawi, seperti prosa yang ditulis dengan baik, jadi ...

public void Function(string p_Parameter1, string p_Parameter2)

... akan lebih mudah dibaca seperti ...

public void Function(string parameter1, string parameter2)

... di mana parameter1 dan 2 adalah nama deskriptif untuk variabel terkait.

Inilah tautannya, pasti patut dilihat: Tautan

Luis Aguilar
sumber
-3

Saya percaya pada suffixing parameter: string s_, int i_, dll

Saya juga percaya bahwa nama-nama parm harus pendek dan generik mungkin.

Sekarang dengan alasan:

  • Dalam fungsi ini, Anda tidak ingin mengubah parameter dengan cara apa pun, jika Anda memerlukan versi yang dimodifikasi, buat variabel baru untuk memasukkannya. Penamaan parm dengan suffix akan memastikan Anda tidak menugaskannya jika Anda membayar perhatian.
  • Pengecualian untuk aturan ini datang saat parm ref atau out. Meskipun saya masih menggunakan akhiran pada itu.
  • Mengapa nama generik pendek? Anda harus mendokumentasikan fungsi Anda sehingga Anda tahu apa s_ sebenarnya dalam arti deskriptif. Jadi dengan itu keluar dari jalan, menggunakan obat generik pendek berguna ketika Anda membuat grup fungsi yang sama, atau kliping badan fungsi untuk dipindahkan ke fungsi lain sebagai titik awal untuk modifikasi.
  • Manfaat sebenarnya dari nama generik adalah Anda tidak perlu mengingat apa yang Anda sebut parameter itu dalam banyak kasus. Anda tahu Anda mendapatkan string, jadi itu s_, dll dan tidak perlu bertanya-tanya apakah itu 'nama file' atau apakah itu 'filepath' atau apakah itu 'fullpath', itu satu-satunya string jadi 's_'.

Semuanya memiliki pertukaran, dan apakah Anda menggunakan sesuatu atau tidak akan banyak bergantung pada bagaimana hal itu sesuai dengan gaya Anda saat ini.

Menandai
sumber
6
-1: a) Anda awalan, bukan suffixing; b) ini notasi Hongaria dan harus sesuai dengan yang harus dilakukan .
Peter K.
1
Apakah tipe C # aman?
pyvi
1
@ Peter K. - Sepertinya saya seperti sdan inama-nama pendek karena ini hanya sebuah contoh. TETAPI saya tidak berpikir ini adalah bahasa Hongaria sama sekali - saya pikir Anda salah mengartikan nama pendek yang hanya merupakan hal klasik string satau int isaya-tidak-bisa-memikirkan-nama yang lebih baik, tetapi dengan sufiks garis bawah terpaku pada .
Steve314
@ Steve314: Ah, Anda mungkin benar! Mari kita lihat apakah Mark merespons.
Peter K.
S_ adalah saya kira anonim HG, dan itu bukan karena contoh.
Tandai