Adlandırma kurallarına önem verilmeye değer mi?


13

Değişkenlerimi .Net kurallarını kullanarak adlandırıyorum:

  • Değişkenler ve alanlar için camelCase (bir sınıftaki özel alanlar için _camelCase kullanma eğilimindeyim)
  • Yöntemler, özellikler ve sınıflar için PascalCase

Saptığım tek yer, aslında Java SCREAMING_CAPS stilini tercih ettiğim sabitler ve Numaralar.

Şirketimin kod temeli, VB6 ve VBScript'ten sözde Macar gösterim stili ile doludur, tam gelişmiş değilse Macarca yani

  • Dizeler için s veya str
  • Ints için i veya int
  • ondalık için d (veya bazen çift)
  • o veya herhangi bir nesne için obj

Başka birisinin kodunda kullanılan kod stilini gördüğümde (sadece eski sade değil, yeşil alan kodunda bile) görüyorum ve bu stili kendim kullanmayı reddediyorum. Geçmişte .Net adlandırma kurallarında standartlaştırma getirdim ve sadece göz ardı edildi - Macarca gösterimde yazan insanlar bunu yapmaya devam ediyor, benden hoşlanmayanlarımız kendi tarzımızı kullanmaya devam ediyor; Bence eğer bu biraz korkuyorum yapmak (ı için bastırıyor tutmak, ama kimse bakımı gibi görünüyor) standardize, bu Macar notasyonu ve önerilen yolu üzerinde olacak ve sonra ben böyle yazma kodu zorunda olacak .

Bununla ilgili bir köstebek tepesinden bir dağ mı yapıyorum? Kodun açıklayıcı isimlerle değil gereksiz tanımlayıcılarla dolup taşmadığı umurumda değil ve kendi yolumu kullanmaya devam etmeli ve bunun standart hale gelmesi için itmeli miyim?


2
İyi soru. Adlandırma kuralları engel olmak için değil, yardım etmek için vardır. Engellendiklerinde (orijinal amaçları artık alakalı olmadığından) onları bırakın.
Gary Rowe

Yanıtlar:


7

İlgilenmeniz gereken tek şey, insanların bir şeyleri biraz temizlemeyi umursamadığı bir ekipte çalışmanızdır. Çok üzücü.

Yaptığınız şeyi yapın, modern stili kullanmaya devam edin ve insanları da benimsemeye davet edin (ancak onları zorlamayın). Elbette zaman alacak. Bir süre sonra herhangi bir yere gidip gitmediğini ve bundan sonra ne yapacağınızı göreceksiniz.

PS Bu konuda bir toplantı düzenlemeye ve katılan herkesi davet etmeye ne dersiniz? O zaman onların tüm dikkatini çekecek, sorunu gösterecek ve yaklaşımınızı sunacaksınız. Düşünecekleri bir şey verecek. Belki yerel girişimlerinizden sizi çok ciddiye almıyorlar.


+1 Bugünlerde Refactor Rename o kadar verimlidir ki değişiklik yapmanın etkisini neredeyse hiç fark etmeyeceksiniz.
Gary Rowe

2
Ne yazık ki ekibimdeki insanlar bunu bile kullanmıyor. İsim yanıltıcı olsa bile bir şeyleri yeniden adlandırmaktan korkuyorlar. Örneğin SendNewCustomerEmail, sadece yeni müşteri e-postalarını değil, her türlü e-postaları göndermek için kullanılan bir yöntem var . Mevcut bir geliştiriciden "Bu adın yanıltıcı olduğuna dikkat edin" yazan bir yorumu var, ancak hiç kimse aslında daha genel ve kullanışlı bir şeye yeniden adlandırmayı düşünmedi ve bunu yaparsam yönetici tarafından neden değer eklemek yerine değiştirilmesi gerekmeyen kodu değiştiriyorum.
Wayne Molina

3

Macarca gösterimin kişisel çıktınızı / kalitenizi etkileyip etkilemediğini veya daha çok egonuza zarar verip vermeyeceğini kendinize sormanız gerektiğini düşünüyorum. Ego ile kastediyorum, işler genellikle işe yarıyor, ama dışarıdan saygı duyduğunuz birinin utanç verici eski kodu görmesini asla istemezsiniz. Bu kaygının kendine özgü bir değeri olduğunu düşünürken, geçiş yapmak zorunda olan herkesin alacağı kalite / verimlilik vuruşuna karşı tartmak zorundasınız.

Bu bir tür teknik borç sorusudur, çünkü bu stilin Macarca'nın .Net'te ("I" ile arayüzler hariç, ancak başka bir zaman için thats hariç) bir anlam ifade etmediği açıkça doğrudur, ancak bu tür olabilir doğal olarak kaybolana kadar ekibinizin yaşayabileceği teknik borç .


4
Ben bile "I" önek umurumda değil, ve sadece bir Java adlandırılmış arabirimi CustomerRepository, sınıf adlandırılmış ve sınıf varlık CustomerRepositoryImplya da benzer olması kaçınmak çünkü kullanın .
Wayne Molina

3
+1 - Görünüşe göre daha iyi bir yol olmalı. Zaman zaman "Macar Işığı" kullanıyorum, ancak önekler her zaman işle ilgili, türle ilgili değil. Örneğin, Muhasebe'deki her şeyin bir AP ve AR tarafı vardır ve genellikle Fatura gibi aynı ada sahiptirler. ARInvoice ve APInvoice'e sahip olmak benim için son derece makul görünüyor. Macarca TÜM kötü değil TÜM zaman.
Morgan Herlocker

@Wayne M Sen bakmak isteyebilirsiniz programmers.stackexchange.com/questions/75956/...
Gary Rowe

Gerçekten bu "Macarca gösterim" düşünün olmaz çünkü söylediğiniz gibi insanların Xmlyerine XML ile kod kullanarak aynı kod satırları boyunca, insanların iyi tanımlanmış bir kısaltma ile bir iş anlamı ExtensibleMarkupLanguage. Bir muhasebe modülünde ben ederim bekliyoruz gibi fatura nesneleri görmek için arInvoiceve apInvoiceiş bağlamı iletmek, ancak görme objArInvoiceveya oApInvoiceIMO sadece saçma. Sanırım daha kötü olabilir clsApInvoice, gerçek sınıf adı
Wayne Molina

1
@ironcode: Aslında Apps Hungarian Notation, Systems Hungarian Notation'a karşı denen şey ve çok daha iyi. Çoğu insan Maalesef Sistemleri kullanıyor. en.wikipedia.org/wiki/…
Miki Watts

2

Macarca notasyonuna karşı en iyi argüman, renkle birlikte bir değişkenin türünü, görünürlüğünü ve daha fazlasını göstermek için çok sayıda yöntemi olan modern IDE'lerin yanında, küçük sembollerle ve gezinirken araç ipuçlarıyla ciddiye almaktır.

  • Daha fazla distilasyon (b) ool (f) loat (c) har (l) ong (s) hort (String? No: (S) tring ile çatışmalar), (v) oid.
  • Görünürlüğü kodlamayı teşvik edin. Javaland'lıyım ve .net için de uygun olduğunu umuyorum: (pri) vate, (pub) blic, (pro) tected (def) ault kullanılmalıdır.
  • .net final / const var? Bir önek yap! 'Uçucu' duyuyor muyum?
  • İnt ve long neden bir önek gerektirir, ancak farklı nesneler gerekmez? Bu mantıklı değil. Bir kısaltma.tab oluşturun. burada her yeni Nesne farklı bir kısaltma alır.
  • Boş olabilen değişkenler ve asla boş bırakılmaması gereken değişkenler de önek olarak kullanılabilir. Akıllı insanlar tüm DbC'yi bir değişkenin önekine koyarlar.

Cidden: Yeniden düzenleme işleminde, bir değişkeni int'ten long'a, String'den char'a değiştirebilirsiniz. Adı da değiştirmeniz gerekmez.

IDE'lerde, adları genellikle yandaki bir Kutuda sıralanırsınız. bulmak kolay, isme göre sıralanır. Değişkenlerin çoğu o veya i ile başlarsa, adın önemli kısmına ulaşmak gözler için rahatsız edicidir.

Ek karakterler değişkenin anlamını bozar. Bir tamsayı 'sane', 'çılgın' gibi görünen 'i_sane' alır.

Macarca gösterim, bir tür sistemi olmayan dillerde yardımcı oldu. Derleyici belirli türleri zorlarsa buna ihtiyacınız yoktur. Macar gösterimiyle ilgili lamento'yu empatik bir 'evet, yaşlı programcılar için geçmişte kullanmak mantıklıdır!', Bu yaşlı programcılar boşuna olabilir ve eski olarak tanımlanmamayı tercih edebilir.

Ancak tekniğin çalışması için dikkatli olmalısınız. Belki 'yaşlı programcılardan' bahsederken sesinizi düşürebilir, hissetmelerine, onlar hakkında ne kadar dikkatli olduğunuza, bakıma ne kadar ihtiyaç duyduklarına izin verebilirsiniz. Böylece odadaki üçüncü bir kişi, elbette merakını artıracak bir şeyi saklamaya çalıştığınızı anlayacak.


Ne yazık ki eSomeEnumyerlerde de kullanılmış gördüm ; Neyse ki sık sık değil.
Wayne Molina

2

Çerçeve Tasarım Kılavuzlarının bir kopyasını satın alın ve yöneticinizin (veya kodlama stilini kontrol edenlerin) masasına bırakın. Tutarlı bir şekilde, tutarlılığın önemini vurguladıkları girişe dikkat çeken bir yazı koyduğunuzdan emin olun. Eve daha da gitmek için, Temiz Kod'un bir kopyasını alın ve kodlama kuralları ile ilgili bölüme bir yer imi koyun.


1

Bazı açılardan bu sübjektif bir konudur ve bir süre eğlendirdiğim minutae (yazım?) Tartışmalarından biridir. Macarca gösterimin yasaklanması gereken bir günah olduğunu düşünürken, tutarlılığın daha önemli olduğunu düşünüyorum.

Bu bağlamda, bir takımı tür tabanlı adlandırma kurallarından ziyade etki alanı merkezli değişken adlandırma kullanmaya ikna etmek için elimden geleni yapacağım, ancak her şey zorlaşırsa herkesin uyması gereken bir adlandırma standardını kabul etmek için geri döneceğim ortak bir kod tabanı.

Bir standartlar grubu tarafından dayatılan bazı genel olarak zorunlu standartlardan yana değilim, ancak yazılım ekipleri kendi standartlarını geliştiriyor ve daha da önemlisi, buna bağlı kalıyor.


1

Yeniden şekillendirici değişkenleri o kadar hızlı ki hasta olarak kabul edilen adlandırma kurallarını o kadar hızlı geri alabilirim ki, eski, yanlış başlı konvansiyonları ayakta bırakmak zorunda kalmam.

Yeniden düzenleme araçlarınız yoksa, kod tabanının mevcut kuralını, yanlış yazılmış olsa bile mümkün olduğunca takip etmeyi öneren diğer yorumcularla aynı fikirdeyim. (bir noktaya kadar, izin verirseniz hata oluşturuculara dönüşecek değişken adlandırma kuralları vardır)


0

Endişelerinizin çoğu geçerlidir ve yeni bir geliştirici ve muhtemelen akıl sağlığınız için hayatı kolaylaştırır. Hepiniz benimsemeniz gereken tek kural açıklayıcı isimlerdir. Ne kadar kötü olduklarına bağlı olarak stilleri büyük ölçüde değiştirmeden bu konuda bir fikir birliğine varmalısınız. Diğer her şey için, ya siz sorumlu oluncaya kadar bekleyin ya da mevcut üyeleri yaptığınız gibi düşünen ve hisseden yeni geliştiricilerle değiştirin.


0

Sapmalarım:

  • _PublicPropertyBacker
  • _private_property_backer
  • _privateMember
  • CONSTANT_MEMBER
  • privateFunction
  • PARAM_
  • özel Düğme okBU; //vb. 3 karakter sınırı
  • strucv SOMESTRUCT // pinvoke yapılar için

Genel Kod Bölgeleri ve dosya düzeni:

  • Üyeler
    • (özel | dahili | korumalı | genel) X [statik] X [sabit / salt okunur]
  • Özellikleri
    • (özel | dahili | korumalı | genel) X [statik] X [salt okunur]
  • Kurucular
    • (özel | dahili | korumalı | genel) X [statik]
  • Komutlar // geçersiz dönüş veya durum dönüşlü herhangi bir şey
    • (genel | korumalı | dahili | özel) X [statik]
  • Olay İşleyicileri / private /
    • (Kontrol | Uzak | Hizmet | Diğer) Olayları
  • Fonksiyonlar // durumu sorgula, hiçbir yan etkisi olmamalıdır
    • (genel | korumalı | dahili | özel) X [statik]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.