/// yorum blokları neden önemlidir?


49

Birisi bir keresinde tüm yöntemlerimizi /// <summary>yorum blokları (C #) ile belirtmemiz gerektiğini söyledi, ancak bunun nedenini açıklamadı.

Onları kullanmaya başladım ve beni biraz rahatsız ettiklerini gördüm, bu yüzden kütüphaneler ve statik yöntemler dışında onları kullanmayı bıraktım. Hacimlidirler ve onları güncellemeyi her zaman unutuyorum.

/// <summary>Kodunuzda yorum blokları kullanmak için iyi bir neden var mı ?

Normalde //yorumları hep kullanırım , sadece /// <summary>merak ettiğim bloklar.


1
Bu yorum bloklarının kişisel tercih mi yoksa önerilen standartlar mı olduğundan emin değildim
Rachel

1
Ben de SO düşünüyorum.
Ryan Hayes

30
Bence bu tam olarak buraya ait bir soru. Bunun, yığılma akışında sübjektif olması nedeniyle kapatılması ihtimali yüksek.
Paddyslacker

Dokümantasyon oluşturmak istiyorsanız <summary> bloklarını kullanın. Başkalarının kullanması için bir API yapıyorsanız bu anlamlı olacaktır. Bunu her yöntem için yapmak aşırı derecede önemlidir ve esnekliğinizi azaltır.
Macneil

Yanıtlar:


91

Onları mümkün olduğunca kullanın.

Evet, bunlar yöntemin belgeleri haline gelen özel yorumlar. Üretilen <summary>parametre etiketleri, vb . İçerikleri, siz veya bir başkası yönteminizi çağırmaya hazırlanırken intellisense içinde gösterilir. Esas olarak, ne yaptığını anlamak için dosyaya gitmek zorunda kalmadan (ya da sadece yöntem imzasını okumaya çalışın ve en iyisini umuyoruz), yöntem ya da sınıfınızın tüm belgelerini görebilirler.


22
+1 Kesinlikle onları kullan. Bileşenlerinizi yeniden kullanırsanız ve tüm bu harika belgelere intellisense'de sahip olsanız, onlara sahip olmanın ne kadar yararlı olduğuna şaşıracaksınız.
Walter

4
Ayrıca, Visual Studio kullanıyorsanız ve bir sınıf, yöntem veya alan bildirisinden hemen önce /// ile bir satıra başlarsanız, VS sizin için XML dokümantasyon yapısını oluşturacaktır - sadece doldurmanız gerekir. Ekranınızda çok fazla alan var, ancak söyleyebilirim ki buna değer bir uzlaşma. Ayrıca, F # bunun için daha iyi bir desteğe sahiptir (örneğin, 'varsayıldığından' beri <summary> ve </summary> kullanmak zorunda değilsiniz).
ShdNx

7
Bu cevap zaten en iyi seçenek olduğundan, sadece yorumumu ekleyeceğim: Özetin intellisense için kullanıldığını öğrendiğimde ve projelerim şu anki boyutlarına ulaştığında, bu özelliği bulduğum için çok mutlu oldum. Yöntemlerimin ve sınıflarımın neye benzediğini hatırlamak büyük bir zorluk haline geldi ve bu mekanizma ile kodun belgelenmesi şeyleri büyük ölçüde basitleştirdi, aylar önce ne yapıldığını hatırlamaya çalışmak yerine yeni koda ve yeniden kullanılabilirliğe odaklanmamı sağladı.
JYelton

3
Eklemek için sadece bir şey, bu yorumlar dll derlenmiş değil , dll ile ilişkili xml dosyasını teslim etmek zorunda.
Benjol

Yararlılar, ancak mevcut sınıfı çok okunaksız hale getiriyorlar. Keşke kodu bozmayan başka bir yol olsaydı.
Jeroen van Langen

16

Evet, bunları saklamak istediğiniz veya paylaşılabilecek bir şey için kesinlikle kullanın.

Ayrıca bunları Sandcastle ve XML çıktısını alan ve güzel, MSDN tarzı belgelere dönüştüren Sandcastle Yardım Dosyası Oluşturucu ile birlikte kullanın .

Çalıştığım son yer, her gece belgeleri yeniden oluşturduk ve iç ana sayfa olarak barındırdık. Şirketin ilkleri MF idi, bu yüzden MFDN idi;)

Normalde sadece kolayca paylaşılan bir .chm dosyası oluşturduğum halde.

MSDN biçiminde görmeye başladığınızda, her şeyi belgelendirmeye ne kadar bağımlı olduğunuza şaşırırsınız!


1
Bloga olan bağlantı ölü gibi görünüyor (son 5 yıl önce sayfanın her tarafında kırık HTML ile birlikte) ve projenin yeri taşındı. Sandcastle için güncellenmiş bir bağlantınız var mı?

12

Kodlama standartlarınız bu tür yorumları (ve bir API veya çerçeve için bir kodlama standardı kullanmanızı gerektiriyorsa) talep ediyorsa, başka seçeneğiniz yoktur, bu tür yorumları kullanmanız gerekir.

Aksi takdirde, bu yorumları kullanmayacağınızı ciddiye alın. Kodunuzu bu şekilde değiştirerek çoğu durumda bunlardan kaçınabilirsiniz:

    /// <summary>
    /// Checks if a user is authorized to access the resource
    /// </summary>
    public bool SecurityCheck( User user ) {

    }

için

    /// <summary>
    /// Checks if a user is authorized to access the resource
    /// </summary>
    public bool IsAuthorizedToAccessResource( User user ) {

    }

için

    public bool IsAuthorizedToAccessResource( User user ) {

    }

11
Kodun mümkün olduğunca sık belgelenmesi gerektiği konusunda hemfikir olmama rağmen, mümkün olduğunda bu tür yorumları kullanmanızı öneririm (ve genel / yorumlardan daha sık). /// XML yorumları IntelliSense ile birlikte çalışacak şekilde tasarlanmıştır; bu, oluşturduğunuz bir kitaplığı uygulamaya çalışırken aylar geçtikçe gelişmeyi kolaylaştırabilir ve daha fazla nasıl çalıştığını hatırlamamaktadır.
Matt DiTrolio

2
Ve sadece Intellisense perspektifinden değil, aynı zamanda otomatik dokümantasyon oluşturma perspektifinden de, xml yorumlarının faydalı olduğunu düşünüyorum. Ancak tüm yorumlarda olduğu gibi, bu yalnızca yorumların kendilerinin yararlı olup olmadığını ve kendi kendini belgeleyen koda ekleyip eklemediklerini algılar.
Vaibhav

5
Bir API veya çerçevenin genel sınıflarını yazarken, kodlama standardının IntelliSense ve dokümantasyon araçlarının ekleyebileceği şekilde koda yorum yazmanızı talep etmesi gerektiğini kabul ediyorum. Ama hepsi bu kadar değil. Bu kaygının yanı sıra, burada savunduğum yaklaşım, kodunuzu daha temiz ve anlaşılır hale getirmeye çalıştığınızda, kodu tanımlayan yoruma değil, kodun kendisine odaklanmaktır.
azheglov

3
@JYelton: Yorumunuz cevabımı yanlış gösteriyor. Daha betimleyici isimler ima ettim, ama mutlaka çok daha ayrıntılı olanları değil, kesinlikle ortak bir fonksiyon için 60 karakterlik bir tanımlayıcı kullanmıyorum. Ayrıca, çok özel bir fonksiyon gibi görünen bir şeye sahipsiniz, ancak çok genel bir veri türü (XmlDocument) alıyor - bu bir kod kokusu. Ardından, 60 karakterli tanımlayıcınız, "genel" bir yöntemin "nasıl" değil "nasıl" olduğunu açıklar. Bu başka bir koku. Ana mesaj şudur: önce kod hakkında düşün, yorum yap.
azheglov

2
@JYelton Yöntem adınızla ilgili sorun, tanımlayıcı olmaması değil, en az 2 ayrı işlemi açıklar ve bu nedenle en az 2 bağımsız yönteme yeniden yansıtılmalıdır.
Neal

4

Sınıfınız, yönteminiz ve mülk isminiz açık bir şekilde anlaşılmalıdır, bu nedenle eğer bunlara ihtiyacınız varsa, muhtemelen bir koku.

Ancak, bunları bir API, kütüphane vb. Genel sınıflarda, yöntemlerde ve özelliklerde kullanmanızı öneririm. onları yazmak için.

Ama yine de dilimleyin, koruyun veya silin.


11
Adlandırma bir şeydir, ancak parametreler veya potansiyel olarak atılan istisnalar üzerindeki kısıtlamaları listelemek hala değerlidir.
Adam Lear

Evet, bir noktanız olduğunu kabul edeceğim, ancak çoğu zaman parametre kısıtlarının açık olduğu açık değil mi?
John MacIntyre

John ile aynı fikirdeyim. Bu mantıkla, .net framework yöntemlerinin hiçbiri Intellisense yardımını almamalıdır.
Vaibhav

1
@vaibhav - Söylediğim şeyi kapsayacak "bunları bir API, kütüphane vb. genel sınıflarda, yöntemlerde ve özelliklerde kullanmayı öneririm" demiştim.
John MacIntyre

1
@John - garip, bu yorumu yazarken tamamen başka bir şey okuduğuma yemin edebilirdim. Çünkü ikinci paragrafınız tam olarak bu konuda başka bir yerde söylediğim gibi. Yani, bu yorumu yazmak için kafamın içinde taşlar olmalı. Evet, buna katılıyorum.
Vaibhav

2

Geri dönüp yeni kodla uyuşacak şekilde yorumlarınızı düzenlemeye devam etmeniz gerektiğine karar verirseniz, en başta bunları yanlış yapıyor olabilirsiniz. Özet elemanı tam olarak şunu içermelidir - özet - özetlediğiniz şeyin neyi ve nedenini .

Nitelendiren nasıl bir şey yorumların çalışır KURU ihlal eder. Eğer kodunuz yeterince açıklayıcı değilse, belki geri dönüp yeniden yönlendirmelisiniz.


1

Evet, onları ben yarattım. [sıfırdan yeni sistemler inşa ederken]

Hayır, onlardan hiç faydalanmadım. [bakım gerektiren mevcut sistemler üzerinde çalışırken]

"Özet" yorumlarının sonunda kodla senkronize etme eğiliminde olduğunu buldum. Ve birkaç kötü davranış yorumunu fark ettiğimde, o projeyle ilgili tüm yorumlara olan inancımı kaybetme eğilimindeyim - hangilerine güveneceğinden asla emin olamazsınız.


Eski yorumlar olsa kod özeti olarak kabul edilebilir, hatta özet düzeyde. Diğer geliştiriciler işlevleri değiştiriyorsa ve yaptıklarının özetini güncellemiyorsa, o zaman işlerini doğru şekilde belgelemedikleri söylenebilir.
rjzii

1

Bir şeyi yapmayı unutmak kötü bir fikir değildir. Herhangi bir belgeyi güncellemeyi unutmak. Bunları programlamamda çok faydalı buldum ve kodumu devralan insanlar onlara sahip oldukları için müteşekkiriz.

Kodunuzu belgelemek için en görünür yollardan biridir.

Satır içi belgeleri okumak için kaynak kodunu bulmak ya da hangi kodun yapıldığı üzerine bir belge kazmak zorunda kalmak acı vericidir. Eğer istihbarat sayesinde işe yarar bir şey bulabilirseniz, insanlar sizi sevecektir.


1

" Benim gibi çok kullanılması gerekiyor;) "

Eskiden yorumlarla oynardım (///). Bir sınıf için sadece böyle bir yorum yapabilirsiniz

namespace test
{
    /// <summary>
    /// Summary description for Calendar.
    /// </summary>
    public partial class DatePicker : System.Web.UI.Page
    {

Ancak, bir yöntem için daha fazla parametre ve dönüş tipleri için açıklama vererek ekleyebilirsiniz.

/// <summary>
/// Assign selected cases to the participating users based on the filters and configurations
/// </summary>
/// <param name="noOfParticipants">No. of participants to the Table</param>
/// <param name="value">Value of the participant</param>
/// <returns>No Of Cases Assigned on successfull completion</returns>
public long AssignCasesToParticipatingUsers(int noOfParticipants,string value)
{

Bu yorumu oluşturmak için bir kısayol kullanabilirsiniz (///+Tab).


0

onları kütüphaneler dışında kullanmak

Yararlı oldukları zaman budur. XML Dokümantasyonu ile nesil açık ve meclise bir referans, projesi olmadan, intellisense daha ayrıntılı gösterecektir.

Ancak mevcut projenin iç kısımları için sadece yoluna devam ediyorlar.


0

Onları kullanıyorum, ancak bazılarının evrensel olarak dediği gibi. Küçük yöntemler için, açıkladıkları koddan kolayca daha büyük olabilirler. Bunlar, sistemde yeni insanlara verilebilecek belgeleri oluştururken, öğrenirken başvuracakları bir şeyleri olması için faydalıdır. Her ne kadar, programcılar olarak genellikle bazı kodların ne olduğunu öğrenebiliriz, çünkü bize yol gösterecek ve koltuk değneği olarak hareket edecek yorumların olması güzel. O Eğer sahip kodunda bir yerde daha sonra yazılmak üzere (yüzen bazı Word belgesi daha muhtemel) o güncel bilgileri edinmek için en muhtemel yerdir.


0

VB'de eşdeğerini kullanıyorum (çünkü C # kullanmama izin vermiyorlar - görünüşe göre çok zor ... yorum yok.) Onları çok uygun buluyorum. Çoğu zaman, sadece yorumları değiştirmek zorunda kalmaktan (veya "senkronize edilmemek") önlemek için, yerleştirmeden önce prosedür veya fonksiyonun tamamlanmasını beklerim.

Ben mutlaka bir roman yazmam - sadece temeller, parametre tanımı ve bazı açıklamalar (genellikle orada "sıradan bir şey" olup bittiği zaman - geçici bir çözüm veya orada olmamayı tercih ettiğim başka bir saçmalık olduğunda) "şimdilik" seçeneğim yok.) (Evet, biliyorum, "şimdilik" bu yıllar sürebilir.)

Ben uncommented kod tarafından ciddi tahriş. Bir danışman, bileşenlerimizden birinin ilk versiyonunu yazdı ve hiçbir şey yorum yapmadı ve burada seçtiği isimler tercih edildi. Bir yıldan fazla bir süredir gitti ve biz hala eşyalarını sıralıyoruz (kendi eşyalarımız üzerinde çalışmaya ek olarak).

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.