Apakah pedoman konvensi penamaan layak diperhatikan?


13

Saya memberi nama variabel saya menggunakan konvensi .Net:

  • camelCase untuk variabel dan bidang (Saya cenderung menggunakan _camelCase untuk bidang pribadi di kelas)
  • PascalCase untuk metode, properti, dan kelas

Satu-satunya tempat saya menyimpang adalah pada konstanta dan Enums di mana saya sebenarnya lebih suka gaya Java SCREAMING_CAPS.

Basis kode perusahaan saya dipenuhi dengan gaya notasi semu-Hungaria dari VB6 dan VBScript, jika tidak, mis.

  • s atau str untuk Strings
  • i atau int untuk Ints
  • d untuk desimal (atau terkadang ganda)
  • o atau keberatan untuk segala jenis objek

Saya merasa ngeri setiap kali saya melihat gaya kode yang digunakan dalam kode orang lain (bahkan dalam kode greenfield, bukan hanya legacy cruft), dan saya menolak untuk menggunakan gaya itu sendiri. Saya telah mengemukakan standarisasi pada konvensi penamaan Net di masa lalu dan itu hanya diabaikan - orang-orang yang menulis dalam notasi Hongaria terus melakukannya, kita yang tidak suka saya terus menggunakan gaya kita sendiri; Saya agak takut jika kita melakukan standarisasi (yang saya terus mendorong, tetapi tidak ada orang lain yang peduli), itu akan menjadi notasi Hongaria dan bukan cara yang direkomendasikan dan kemudian saya akan dipaksa untuk menulis kode seperti itu .

Apakah saya membuat gunung dari molehill dalam hal ini? Haruskah saya tidak peduli jika kode tersebut dipenuhi dengan pengidentifikasi yang berlebihan dan bukan nama deskriptif, dan terus menggunakan cara saya sendiri dan mendorongnya untuk menjadi standar?


2
Pertanyaan bagus. Konvensi penamaan ada untuk membantu, bukan untuk menghalangi. Ketika mereka menghalangi (karena tujuan awal mereka tidak lagi relevan) maka parit mereka.
Gary Rowe

Jawaban:


7

Satu-satunya hal yang harus Anda perhatikan adalah bahwa Anda bekerja dalam sebuah tim di mana orang-orang tidak terlalu peduli untuk membersihkan barang. Itu sangat menyedihkan.

Lakukan apa yang Anda lakukan, terus menggunakan gaya modern dan mengundang orang (tetapi tidak memaksa mereka) untuk mengadopsinya juga. Tentu saja butuh waktu. Setelah beberapa waktu Anda akan melihat apakah itu pergi ke mana saja dan apa yang mungkin Anda lakukan selanjutnya.

PS Bagaimana kalau mengatur pertemuan tentang masalah ini dan mengundang semua orang yang terlibat. Maka Anda akan mendapatkan perhatian penuh mereka, menunjukkan masalah dan mempresentasikan pendekatan Anda. Ini akan memberi mereka sesuatu untuk dipikirkan. Mungkin dari upaya lokal Anda mereka tidak menganggap Anda serius.


+1 Akhir-akhir ini, Ubah Nama Refactor sangat efisien sehingga Anda tidak akan melihat dampak dari melakukan perubahan.
Gary Rowe

2
Sayangnya orang-orang di tim saya bahkan tidak menggunakannya. Mereka takut mengubah nama hal-hal bahkan ketika nama itu menyesatkan. Misalnya ada metode yang disebut SendNewCustomerEmailyang digunakan untuk mengirim semua jenis email, bukan hanya email pelanggan baru. Ini memiliki komentar dari pengembang saat ini yang mengatakan "Catat nama ini menyesatkan" tetapi tidak ada yang pernah mempertimbangkan untuk mengubah nama itu menjadi sesuatu yang lebih umum dan berguna, dan jika saya melakukannya saya akan diminta oleh manajer untuk menjelaskan mengapa saya Sedang mengubah kode yang tidak perlu diubah alih-alih menambahkan nilai.
Wayne Molina

3

Saya pikir Anda mungkin perlu bertanya pada diri sendiri apakah notasi Hongaria mempengaruhi output / kualitas pribadi Anda, atau apakah itu lebih hanya menyakiti ego Anda. Dengan ego, maksud saya hal-hal umumnya bekerja dengan baik, tetapi Anda tidak akan pernah ingin seseorang yang Anda hormati dari luar untuk melihat kode usang memalukan. Sementara saya pikir kekhawatiran itu memang memiliki kelebihannya sendiri, Anda harus mempertimbangkannya terhadap kualitas / produktivitas yang akan diambil oleh semua orang yang harus beralih.

Ini adalah semacam pertanyaan utang teknis, karena Anda jelas benar bahwa gaya bahasa Hongaria ini tidak masuk akal dalam. Net (dengan pengecualian antarmuka dengan "I", tapi itu untuk waktu lain), namun, ini mungkin semacam hutang teknis yang dapat ditanggung oleh tim Anda sampai secara alami memudar .


4
Saya bahkan tidak peduli dengan awalan "Aku", dan hanya menggunakannya karena ia menghindari memiliki teka-teki Java, misalnya, nama yang dihubungkan CustomerRepositorydan kelasnya CustomerRepositoryImplatau sejenisnya.
Wayne Molina

3
+1 - Sepertinya memang ada cara yang lebih baik. Saya memang menggunakan "Cahaya Hongaria" dari waktu ke waktu, tetapi awalan selalu terkait dengan bisnis, bukan tipe terkait. Misalnya, segala sesuatu dalam Akuntansi memiliki sisi AP dan AR, dan mereka sering memiliki nama yang sama, seperti Faktur. Memiliki ARVoice dan APVoice tampaknya sangat masuk akal bagi saya. Hongaria tidak SEMUA buruk SEMUA waktu.
Morgan Herlocker

@Wayne M Anda mungkin ingin melihat programmers.stackexchange.com/questions/75956/…
Gary Rowe

Saya tidak akan benar-benar mempertimbangkan bahwa "Notasi Hongaria" karena seperti yang Anda katakan itu adalah makna bisnis dengan singkatan yang didefinisikan dengan baik yang orang tahu, di sepanjang baris yang sama memiliki kode yang menggunakan XML diawali dengan Xmlalih - alih ExtensibleMarkupLanguage. Dalam modul akuntansi saya akan mengharapkan untuk melihat objek faktur suka arInvoicedan apInvoiceyang menyampaikan konteks bisnis, tetapi melihat objArInvoiceatau oApInvoicehanya IMO konyol. Saya kira itu bisa lebih buruk, itu bisa clsApInvoiceuntuk nama kelas yang
Wayne Molina

1
@ironcode: Sebenarnya itulah yang disebut Apps Hungarian Notation, versus Systems Hungarian Notation, dan jauh lebih baik. Sayangnya, kebanyakan orang menggunakan Sistem. en.wikipedia.org/wiki/…
Miki Watts

2

Argumen terbaik terhadap notasi hungaria, di samping IDE modern, yang memiliki banyak metode untuk menunjukkan jenis, visibilitas, dan lebih banyak barang dari variabel dengan warna, dengan simbol kecil dan dengan tooltiptexts sementara hoovering, adalah, menganggapnya serius.

  • Dorong lebih banyak distribusi (b) ool (f) loat (c) har (l) ong (s) hort (konflik dengan String? No: (S) tring), (v) oid.
  • Dorong pengodean visibilitas. Saya dari Javaland, dan berharap itu cocok untuk .net juga: (pri) vate, (pub) blic, (pro) tected (def) ault harus digunakan.
  • .net memiliki final / const? Jadikan itu awalan! Apakah saya mendengar 'volatile'?
  • Mengapa int dan panjang membutuhkan awalan, tetapi objek yang berbeda tidak? Itu tidak logis. Buat sebuah singkatan.tab. di mana setiap Objek baru mendapat singkatan yang berbeda.
  • Variabel yang mungkin nol dan semacamnya, yang tidak boleh nol, bisa diawali juga. Orang pintar menempatkan seluruh DbC ke dalam awalan suatu variabel.

Serius: Pada refactoring, Anda dapat mengubah variabel dari int ke long, dari String ke char. Anda tidak perlu mengubah nama juga.

Dalam IDE, Anda mendapatkan nama-nama yang sering diurutkan dalam Kotak di samping. diurutkan berdasarkan nama, tempat yang mudah ditemukan. Jika sebagian besar variabel dimulai dengan o atau i, itu mengganggu mata, untuk sampai ke bagian penting dari nama.

Karakter tambahan mengganggu semantik variabel. Integer 'waras' mendapat 'i_sane', yang lebih mirip 'gila'.

Notasi hungaria sangat membantu dalam bahasa, yang tidak memiliki sistem tipe. Anda tidak memerlukannya, jika kompiler menjalankan tipe tertentu. Jika Anda menghias keluh kesah Anda tentang notasi hungaria dengan empati 'ya, untuk programmer yang lebih tua, masuk akal di masa lalu untuk menggunakannya!', Programmer yang lebih tua itu mungkin sia-sia, dan lebih suka tidak diidentifikasi sebagai yang lama.

Tetapi Anda harus berhati-hati, agar teknik ini berhasil. Mungkin Anda bisa merendahkan suara ketika berbicara tentang 'programer tua', untuk membuat mereka merasa, betapa hati-hati Anda terhadap mereka, betapa mereka membutuhkan perawatan. Sehingga orang ketiga di ruangan itu akan mengenali, bahwa Anda mencoba menyembunyikan sesuatu, yang tentu saja akan meningkatkan rasa penasarannya.


Sayangnya saya juga pernah melihat eSomeEnumdigunakan di tempat-tempat; untungnya tidak sering.
Wayne Molina

2

Beli salinan Pedoman Kerangka Desain dan letakkan di meja manajer Anda (atau siapa pun yang mengontrol gaya pengkodean). Pastikan untuk meletakkan posting itu catatannya dengan jelas menunjuk ke pengantar di mana mereka menyoroti pentingnya konsistensi. Untuk lebih jauh pulang, intinya dapatkan salinan Kode Bersih dan letakkan bookmark di sana pada bagian tentang konvensi pengkodean.


1

Dalam beberapa hal ini adalah masalah subyektif, dan ini adalah salah satu dari pemrograman minutae (ejaan?) Yang saya hibur untuk sementara waktu dan kemudian hindari. Sementara saya pikir notasi Hongaria adalah dosa yang harus dibuang, saya pikir konsistensi lebih penting.

Dalam nada itu saya akan melakukan yang terbaik untuk meyakinkan sebuah tim untuk menggunakan penamaan variabel sentris domain daripada tipe konvensi penamaan berbasis, tetapi jika itu semua akan sulit saya akan mundur untuk menerima standar penamaan yang harus dipatuhi semua orang pada basis kode umum.

Saya tidak mendukung beberapa standar yang diamanatkan secara umum yang dipaksakan oleh kelompok standar, tetapi tim perangkat lunak mengembangkan standar mereka sendiri, dan yang lebih penting, patuh padanya.


1

Dengan variabel penamaan ulang resharper begitu cepat sehingga saya dapat membatalkan konvensi penamaan yang dianggap begitu cepat, sehingga saya tidak harus meninggalkan konvensi lama yang salah.

Jika Anda tidak memiliki alat refactoring, maka, saya setuju dengan komentator lain yang telah menyarankan mengikuti konvensi basis kode yang ada sebanyak yang Anda bisa, bahkan jika itu salah kepala. (sampai batas tertentu, ada konvensi penamaan variabel yang akan berubah menjadi generator bug jika Anda membiarkannya)


0

Sebagian besar masalah Anda valid dan akan membuat hidup lebih mudah bagi pengembang baru dan mungkin kewarasan Anda. Satu konvensi yang harus Anda adopsi adalah nama deskriptif. Anda harus dapat mencapai beberapa konsensus tentang hal itu tanpa mengubah gaya secara drastis tergantung pada seberapa buruk mereka. Untuk yang lainnya, tunggulah sampai Anda bertanggung jawab atau Anda mengganti anggota saat ini dengan pengembang baru yang berpikir dan merasakan cara Anda melakukannya.


0

Penyimpangan saya:

  • _PublicPropertyBacker
  • _private_property_backer
  • _privateMember
  • CONSTANT_MEMBER
  • Fungsi pribadi
  • param_
  • Tombol pribadi okBU; // dll. batas 3 karakter
  • struct SOMESTRUCT // untuk struct pinvoke

Wilayah Kode Umum dan tata letak file:

  • Anggota
    • (pribadi | internal | dilindungi | publik) X [statis] X [konstanta / hanya baca]
  • Properti
    • (pribadi | internal | dilindungi | publik) X [statis] X [hanya baca]
  • Konstruktor
    • (pribadi | internal | dilindungi | publik) X [statis]
  • Perintah // apa pun dengan pengembalian tidak sah atau status kembali
    • (publik | dilindungi | internal | pribadi) X [statis]
  • Penangan acara / pribadi /
    • (Kontrol | Jarak Jauh | Layanan | Lainnya) Acara
  • Fungsi // permintaan negara, seharusnya tidak memiliki efek samping
    • (publik | dilindungi | internal | pribadi) X [statis]
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.