Artık bir kodlama standardına ihtiyaç var mı?


13

Bir kodlama standardının çok yardımcı olduğu kanıtlanmıştır. Bununla birlikte, programcının tercih ettiği herhangi bir standarda göre biçimlendirilecek birçok farklı araç ve IDE vardır. Kod düzgün / yorumlandığı sürece (ve bir spagetti karışıklık değil), bir kodlama standardı ihtiyacını görmüyorum.

Bir kodlama standardının geliştirilmesi için herhangi bir argüman var mı (bir tane yok, ama ben bir tane oluşturmaya bakıyordum)?


Bir kodlama standardı uygulamaya karar verirseniz, onu sürekli entegrasyon sırasında zorlamayı düşünün.
Leif Carlsen

10
Takımdaki herkesin aynı IDE'yi kullanması gerekir mi?
Keith Thompson

10
Nadir, özel durumlar dışında operatörleri aşırı yüklemeyin gibi bir kılavuzun yerini hiçbir miktarda kod yeniden biçimlendiremez . . Kodlama standartlarınız çoğunlukla kodunuzun biçimlendirilme biçimiyle ilgiliyse, daha iyi standartlara ihtiyacınız vardır.
Caleb

Bütün insanlar IDE kullanmıyor, örneğin Acme kullanıyorum.
dysoco

Yanıtlar:


33

Bununla birlikte, programcının tercih ettiği herhangi bir standarda göre biçimlendirilecek birçok farklı araç ve IDE vardır.

Bunda iyi şanslar. Deneyimlerim, kodu X biçiminden Y biçimine düzgün bir şekilde yeniden biçimlendirebilen az sayıda araç (sıfır!) Vardır. Sekmeler, boşluklar, çok satırlı deyimler vb. Vs. Yapabileceğiniz şey IDE'nizi yapmak, sekmeler yerine her zaman boşluk kullanmak ve sadece yabancı kodu yeniden biçimlendirmekle uğraşmak değil. Şimdi kodunuz istediğiniz gibi görünüyor ve yabancı kod orijinal yazarın yazdığı gibi görünüyor.

Belirli bir girinti stili, bir kodlama standardının belirtmesi gereken son şeydir. Bu, bir programlama dini savaşı başlatmanın eşiğinde. Bir kodlama standardı olan IMO, makul bir kabul edilebilir girinti stilleri paketi belirtmeli, ancak ayrıntıları bir paketin yazarlarına bırakmalıdır. Girinti stili, bir kodlama standardının küçük bir parçasıdır ya da olmalıdır. Kural numarası sıfır kodlama standartları: Küçük şeyleri terlemeyin. Girinti tarzı küçük bir şeydir.

Daha büyük şeyler:

  • Şeyleri nasıl adlandırırım?
  • Dilin bazı bölümleri sınırsız mı?
  • Kodun temiz ve derleyici ayarlarıyla derlenmesi gerekiyor mu?
  • Kodun belirli metrikleri geçmesi gerekiyor mu?
  • Ne tür testler gerekiyor?
  • Hem kodda (yorumlar) hem de başka yerlerde ne tür belgeler gereklidir?
  • En önemlisi, standarda nasıl feragat edebilirim?

Ek
Belki daha da önemli olan değil bir kodlama standartlarında koymak. Gereksinimlerin nasıl yazılacağı gibi konular kodlama standartlarına dahil değildir. Testle ilgili ayrıntılar da ait değildir. Bir proje, kodlama standartlarını proje yönetim planı, test yönetim planı, doğrulama ve onaylama planı, vb. İçin bir stand-in olarak kullanmamalıdır. ve diğer "iliteler". Bunun olmamasını sağlamak için birçok yol var. Sadece birkaçı: Standartları bazı ülkelerin vergi yasaları kadar karmaşık bir kitap haline getirmek, dini savaşları programlamaya teşvik etmek, kötü adlandırma sözleşmelerine sahip olmak.

Kodlama standartlarının istenmeyen sonuçları olabilir. Örnek: Bir proje mühendisinin bazı aptalları, "sihirli numaralar kuralı yok" anlamına gelecektir if (index == 0) {...}ve for (ii = 0; ii < 3; ++ii) {...}bunun değiştirilmesi if (ZERO == index) {}ve for (ii = ZERO; ii < NUMBER_OF_DIMENSIONS_IN_THE_UNIVERSE; ++ii) {...}gülmemesi gerektiği anlamına gelecektir . Bunun olduğunu gördüm. Günümüzde bir kodlama standardı yazdığımda, bu tür aptallığa karşı koymak için bir kural yerine "sihirli numaralar kılavuzu" değildir.

Kodlama standardı, kötü programlama tarzı / tehlikeli kodlama uygulamalarına karşı bir numaralı savunma değildir. Kod incelemesi. Yıllarca süren otomasyona rağmen, yine de öznel bir insan gözü setinin bir kod parçasına bakıp karar vermesinden daha iyi bir şey yoktur.


Harika bir liste için +1 - bu benim favori cevabım. Özellikle limit dışı kod, derleyici uyarıları, test ve dokümantasyon. Ancak hala sekmeler ve boşluklar ile girinti arasındaki önemli olduğunu düşünüyorum. Başka biri, kaynak kontrolündeki değişiklikleri farklılaştırırken kabustan bahsetti.
GlenPeterson

Sekmeler ve boşluklar ile başa çıkmanın kolay bir yolu, kodlama standardında sekmelere izin vermektir. Bunu zorlamanın kolay bir yolu, iade işlemini reddeden veya boşluk olarak kullanılan sekmeleri boşluklara dönüştüren bir giriş kancasına sahip olmaktır. Gece yapımı veya check-in sırasında (neredeyse anında geri bildirim nedeniyle tercih edilir) gibi bazı kodlama standartlarının otomatik olarak doğrulanması çok güzel bir özelliktir. Check-in yapılmasına izin verilirse (veya zorlanırsa) ve dönüşüm karışıklık yaratırsa ne olur? Bunun da kolay bir cevabı var: Kod incelemesi. Çirkin bir POS toplanmamalıdır; gözden geçirilmemeli bile.
David Hammen

"Sekme yok" kuralının (görüşlerim değiştiği için listemde kaçındığım bir şey) kodunuzu yazarken sekmeleri kullanamayacağınız anlamına gelmediğini unutmayın. İyi bir editör, programcının yazdığı sekmeleri boşluk alanına dönüştürebilir. Editörünüz bunu yapamazsa, belki daha iyi bir editöre geçmeyi düşünebilirsiniz.
David Hammen

Orada argüman yok. Girinti / biçimlendirmenin listede olduğunu söylemek yeterlidir. Sekmeler HTML veya çalışma zamanında indirilen veya ayrıştırılan dosyalar için uygun olabilir .
GlenPeterson

@GlenPeterson - Girinti / biçimlendirme listemde veya listemden hemen önce: "IMO, bir kodlama standardı makul bir kabul edilebilir girinti stilleri paketi belirtmeli, ancak ayrıntıları bir paketin yazarlarına bırakmalıdır." Ve evet, "sekme yok" kuralının istisnaları vardır. Mesela makefiles.
David Hammen

60

Kodlama standartları sadece tercih edilen parametrelerle ilgili değildir indent- ayrıca adlandırma kuralları, yorumlama kuralları ve deyimler, dil özelliği kullanımı vb. İçin çok sayıda olası önerileri içerir.

Daha da önemlisi, tüm bunları bir yerde belgelemeniz gerekiyor. Ve son olarak, herkes kodu bu şekilde yeniden biçimlendiren bir IDE kullanmak istemeyecek ...


1
İyi cevap, benim düşünmediğim şeyleri kapsayan iyi bir açıklama ile bilgimi genişletti. +1
SomeKittens

Ayrıca, platformlar arası uyumluluğun nasıl ele alınacağı gibi konuları da kapsayabilirler; bu, platformlar arası kod yazarken yeni bir geliştirici deneyimli değilse son derece önemlidir.
Velociraptors

3
Bu cevabın iyi olduğunu düşünüyorsanız ve sorunuzu cevaplarsanız, sadece bu şekilde işaretleyin.
marktani

3
Oraya başka bir iyi standart attığınızda kitle yeniden biçimlendirmenin baş ağrılarına neden olabileceğinden bahsetmiyoruz: kaynak kontrolü.
Matthew Scharley

1
@MatthewScharley genellikle biçimlendiricisine yoluyla değiştirilen kod itmek ve daha sonra repo üzerinde yani sadece biçimlendirilmiş kod get (bir şey kırmadılar biçimlendirici sağlamak için belki son bir deneme çalışmasından sonra) işlemek
mandal ucube

13

Bir ekip içinde tutarlı bir stil kullanırsanız, kodunuzun okunması kolaylaşır. Kodunuzun okunması kolaylaştığında ekibiniz daha üretken olacaktır. Daha üretken olacaklar çünkü kodu zihinsel olarak ayrıştırmak zorunda değiller ve kodu incelerken ve yönetirken sözdiziminden ziyade mantığa odaklanabilirler.

Her kişi IDE'nin kodunu kendi seçimine göre yeniden biçimlendirmesine izin veriyorsa, iki sorundan birine sahipsiniz: ya kaydederken her zaman orijinal formata dönüştürdüğünüzden emin olmalısınız veya farklarınızın çok fazla gürültü göstereceği gerçeğinden muzdarip olmalısınız, bu da kodun mantığında nelerin değiştiğini görmeyi zorlaştırıyor.


4
Diffs! Bunu düşünmemiştim.
SomeKittens

1
Evet, kesinlikle herkesin kod üzerinde her çalıştıklarında yeniden biçimlendirmesine izin vermeyin . Bu sadece bir pandemonium. Kötü bir standart bile bundan daha iyidir. Seçim göz önüne alındığında, yeni geliştiricilerin hızlı bir şekilde hızlanabilmeleri için dilde en popüler olanı yapmaya çalışacağım. Diliniz için standart standardı bulmak için web'i kullanın.
GlenPeterson

5

Kısa Cevap: Evet, kaliteyi yansıtır .

Nedir ve neden ihtiyacımız var?

Kodlama standartları yüksek kaliteli yazılımın çok önemli bir parçasıdır. Onlar do verimlilik artışı sağlamak için yapmak kod kolay, geliştirme sürecinde ve bir kişi veya takımın bağlı olmaktan kodu tutun. Kodlama standardındaki tutarlılık, erken oluşturulan kodu iyi hazırlanmış sanattan da ayırır.

resim açıklamasını buraya girin

Tamam, her geliştirici kodlama kurallarının iyi olduğunu bilir. Ancak standartlar nereden gelmelidir?

Çoğunlukla ürünün sahibi olan satıcı tarafından belirlenir. Her geliştirici birçok endüstri kodlama standardı arasından seçim yapabilir. Bazı şirketler Microsoft, Oracle ve Sun Microsystems kılavuzlar sunmaktadır.

Bir kodlama standardının geliştirilmesi için herhangi bir argüman var mı (bir tane yok, ama ben bir tane oluşturmaya bakıyordum)?

Evet, kullanılması tavsiye edilen endüstri standartları vardır. Ancak, her kodlama standardı geliştirme platformuna özeldir. Bu nedenle, kodlama standartları çoğunlukla dile özgüdür. Örneğin, Java'nın .NET'ten farklı bir standardı vardır. Örneğin, C # .NET bu başvurudaki standartları kullanır .

Ortak standartlar

Ortak standartların herhangi bir programlama diline bağımlılığı yoktur. Satıcının sunduğu standartlara ek olarak, adı geçen endüstri kodlama standartları, Macar Gösterimi veya CamelCase gibi farklı programlama gösterimleri de vardır . Microsoft .NET kodlama standartlarının başlangıçta CamelCase notasyonlarına dayandığını düşünüyorum.

Takım kodlama standartları ve yönergeleri

Düşünce, her geliştirme ekibi proje başlar başlamaz kodlama standartları üzerinde anlaşmalıdır. Kodlama yönergeleri genellikle Ekip Lideri veya şirketin baş Mimarı tarafından oluşturulur. Genellikle ihtiyaç üzerine izlenecek ve geliştirilecek açık bir belgedir. Örneğin, şirketimizde bu belgenin yüklendiği ve şirket geliştiricileri tarafından kullanılabildiği Wiki sayfalarımız vardır.


Bence soru bu şeylerin neden önemli olduğunu soruyor . Bir kodlama standardının neleri kapsadığını açıklarsınız, ancak soru neden gerekli olduğunu soruyor.
Bryan Oakley

cevabımı henüz bitirmedim
Yusubov

Bu While Nottamamen bir olmalıdır Do Until.
Ry-

2

Tartışmalı bir görüş alacağım ve hayır diyeceğim bir kodlama standardına ihtiyacınız yok . Kurallar, dediğiniz gibi, IDE tarafından uygulanabilen yönergeler, her şirketteki herkesin uyması gereken genel en iyi uygulamalardır veya bunlar, yetenekli bir ekipte birden fazla kişi tarafından yapılması gereken, her vaka için ayrı ayrı karar çağrılarıdır. çift ​​programlama veya kod incelemeleri yoluyla.

Bu değişkene nasıl isim vermeliyiz? Hangi dil özelliklerini kullanmalıyız? Kaçınmalı mıyız? Hangi test en iyisidir? Bunlar, şu anda üzerinde çalıştığımız dar tanımlanmış sorunla karşılaşıncaya kadar cevapsız bırakılmalıdır .

Bu küçük kararlardan kristalize edilen, mevcut sorun alanı ve kullanılan teknolojilerle kesişmeye dayalı olarak ekipler içindeki gayri resmi standartlar / kalıplar ortaya çıkabilir. Bunları kodlamak, bu projelerde kullanılan adlandırma standardı, uygun dil altkümesi vb. Şeylerin, yüzlerce mikro karara dayalı olarak ve bu ekipler tarafından gayri resmi olarak benimsenmesi, her projenin ilerlemesine yol göstermesi gerektiğini düşünüyoruz.

Prensipte harika bir şey gibi geliyor, ama gerçekte politika için bir mıknatıs haline geliyor. Herkesi hangi araçları kullanmaya zorlayabiliriz? Diğer insanları kaçınmak için neyi zorlamak istiyorum? Herkes bu sorular üzerinde anlaşmış olsaydı, bir standarda ihtiyacımız olmazdı. Sadece yapardık. Deneyimlerime göre, standartlar geliştiricilerin bir alt kümesinin başka bir alt küme üzerinde kontrol kullanma arzusundan kaynaklanmaktadır. Tipik olarak bu tür bir politika ve onu izleyen teknolojik polislik, rehberlikten ziyade sadece yeniliği engeller.

Gerçek rehberlik istiyorsanız , bir grup yararsız kural içeren bir standart okumak yerine, ekibinizin yetenekli üyelerini bulun ve onlara ne düşündüklerini sorun. Ne tarafından yakıldılar? Kod yazmanızı nasıl öneriyorlar? Yedeklemek için çok değerli deneyime sahip çeşitli faydalı cevaplar alacaksınız. Ortak deneyime dayalı bir çok kavşak göreceksiniz. Standart tarafından uygulanan monokültür yerine, sadece sorunları çözmek için birçok geçerli yol görmenize yardımcı olabilecek bir çok çeşitlilik göreceksiniz.

Ve birileri size "standart" bir kuralın nedenini yapmamanızı söylediğinde, ancak iddialarına ilişkin tecrübesi veya makul bir yedeği olmadığında, bunları görmezden gelin. Burada standart kimseye hizmet etmedi veya kimseyi daha iyi bir geliştirici yaptı.


Bana göre iyi - zaman kaybetmek için daha az bir şey, özellikle tüm devs bir Resharper lisansına sahipse ve fxcop / stylecop derleme sunucusunda çalışıyorsa.
StuartLC

1
Standartlar, insanların deneyimlerinin doruk noktası ve pekiştirilmesi olmalıdır ve genellikle de öyle olmalıdır. Bahsettiğiniz "yetenekli insanlar". Yanlışlarsa, onları geliştirin, ancak elden çıkarmak, anarşi için bir reçetedir.
Andrew

@Andrew Bu deneyimler geçerli olmayabilir ve çözmekte olduğunuz mevcut sorunla ilgisi olmayan
Doug T.

1
Yeniliğin boğulması, alt kümelerin kontrolü, genel en iyi uygulamalar ve politika için +1. Eğitin, düzenleme!
kirk.burleson

"Yazılı kodlama standardı yok, konvansiyona güveniyor ve rehberlik istiyor" küçük ekiplerde oldukça iyi çalışıyor (bilmiyorum, 50-100? Den daha az). Kod tabanındaki projeler arasında gidip gelen binlerce insanınız olduğunda, kod için yazılı bir dizi yönergeye sahip olmanız gerçekten yardımcı olur.
Vatin

1

Artık ticari uçaklar hava yoluyla uçuyor, pilotların giriş çalışmalarına dayanarak uçağı uçan programların olmasını umuyorsunuz. Programcılar böyle bir kod yazdıklarında, yaygın olarak önlenebilir programlama hatalarından kaçınmak için katı bir kurallar dizisi uyguladıklarını umarsınız. Bunu yapmanın bir yolu bir kodlama standardıdır.

Bakınız: Önerilen Federal Havacılık İdaresi C ve C ++ Kodlama Standartları

Daha da anlatmalı mıyım.

Not: FAA'dan çevrimiçi olarak gerçek standardı bulamadım, ancak gördüm.


Bu prototip bir kötü kodlama standardıdır. Çok uzun, dini meseleleri gündeme getiriyor ve en önemlisi modern C ++ programlamasına aykırı. Örneğin, POD'u (düz eski veriler) engeller ve istisnalar hakkındaki kuralları kötüden arkaikine kadar değişir. Kötü: std :: bad_alloc'u yakalamaya çalışmak çok kötü bir fikirdir. Arkaik: Atılabilecek tüm istisnaları belirleme ve çağrılan işlevler tarafından atılan tüm istisnaları yakalama Java fikri C ++ ile çalışmaz. David Abrahams'in istisna garantileri kavramlarına dayanan istisnai güvenlik kodları yazmak daha iyidir.
David Hammen

1

Benim için bu bir disiplin meselesi ve disiplinli olmak her zaman yardımcı oluyor, ürettiğiniz işin kalitesinin bir yansıması.

Bunu söyledikten sonra, kodlama standardını IDE ve / veya kullanılan araçları göz önünde bulundurarak yapacağım. Ayrıca, IDE her geliştirici için aynı şekilde yapılandırılmalıdır (örn. Her geliştiricinin IDE'si girintiler için tüm sekmeleri veya tüm beyaz boşlukları kullanmalı ve herkesin IDE'si aynı sekme uzunluğuna sahip olmalıdır), böylece herkes standardı kolayca takip edebilir ...

Ayrıca, kodlama standartlarına bir dereceye kadar uyulmasına yardımcı olabilecek check-in komut dosyaları geliştirilebilir ve kullanılabilir, örneğin teslim edilen dosyayı sürüm kontrol sistemine fiilen vermeden önce girintiyi düzeltebilirler.


1

Kodlama standartları daha önemli olamaz! Ben hevesli bir CakePHP kullanıcısıyım ve sürümden sürüme değişiklik kümelerini incelemek istiyorum ve geliştiriciler standartlara uymuyor.

Aslında, stil farklılıkları yüzünden o kadar üzüldüm ki, Kodlama Kuralları Hakkında Kısa Bir Rant yazmak zorunda kaldım . Yeni geliştiricileri zaten mevcut bir ekibe kazandırmak için çok fazla zaman ve para gerekiyor - sadece yeni bir geliştiriciyi standartlar olmadan getirdiğinizi hayal edin ... kodu öğrenmek artık imkansız olacaktır.

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.