เหตุใด /// บล็อกความคิดเห็นจึงมีความสำคัญ


49

มีคนเคยกล่าวว่าเราควรนำหน้าวิธีการทั้งหมดของเราด้วย /// <summary>บล็อกความคิดเห็น (C #) แต่ไม่ได้อธิบายว่าทำไม

ฉันเริ่มใช้พวกเขาและพบว่าพวกเขาทำให้ฉันรำคาญเล็กน้อยดังนั้นหยุดใช้พวกเขายกเว้นห้องสมุดและวิธีการคงที่ พวกมันเทอะทะและฉันก็ลืมที่จะอัพเดทอยู่เสมอ

มีเหตุผลที่ดีที่ใช้/// <summary>บล็อคความคิดเห็นในรหัสของคุณหรือไม่

ปกติฉันจะใช้//ความคิดเห็นตลอดเวลามันเป็นเพียง/// <summary>ช่วงเวลาที่ฉันสงสัย


1
ฉันไม่แน่ใจว่าบล็อกความคิดเห็นเหล่านี้เป็นความชอบส่วนตัวหรือมาตรฐานที่แนะนำ
Rachel

1
ฉันก็คิดเช่นกัน
Ryan Hayes

30
ฉันคิดว่านี่เป็นคำถามที่ตรงกับที่นี่ มีโอกาสที่ดีที่สิ่งนี้จะถูกปิดใน stackoverflow ว่าเป็นแบบอัตนัย
Paddyslacker

ใช้บล็อก <summary> หากคุณต้องการสร้างเอกสาร นี่จะสมเหตุสมผลถ้าคุณใช้ API เพื่อให้ผู้อื่นใช้ การทำเช่นนี้ในทุก ๆ วิธีนั้นเกินความจำเป็นและลดความยืดหยุ่นของคุณ
Macneil

คำตอบ:


91

ใช้พวกเขาให้มากที่สุด

ใช่เหล่านี้เป็นความคิดเห็นพิเศษที่เป็นเอกสารสำหรับวิธีการ เนื้อหาของ<summary>, แท็กพารามิเตอร์, ฯลฯ ที่สร้างขึ้นจะแสดงใน Intellisense เมื่อคุณหรือคนอื่นพร้อมที่จะเรียกวิธีการของคุณ พวกเขาสามารถดูเอกสารทั้งหมดสำหรับวิธีการหรือคลาสของคุณโดยไม่ต้องไปที่ไฟล์นั้นเพื่อหาว่ามันทำอะไร (หรือลองอ่านลายเซ็นวิธีและหวังว่าจะดีที่สุด)


22
+1 ใช้อย่างแน่นอน คุณจะประหลาดใจที่มีประโยชน์แค่ไหนถ้ามีส่วนประกอบเหล่านั้นมาใช้ซ้ำและมีเอกสารที่ยอดเยี่ยมทั้งหมดในระบบ Intellisense
Walter

4
นอกจากนี้หากคุณกำลังใช้ Visual Studio และเริ่มต้นบรรทัดด้วย /// ก่อนการประกาศคลาสวิธีหรือฟิลด์ VS จะสร้างโครงสร้างเอกสาร XML สำหรับคุณ - คุณต้องกรอกข้อมูลฉันยอมรับว่ามันใช้เวลานาน มีพื้นที่บนหน้าจอของคุณเยอะ แต่มันคุ้มค่าที่ฉันจะบอก นอกจากนี้ F # ยังมีการสนับสนุนที่ดีกว่าอีกด้วย (เช่นคุณไม่จำเป็นต้องใช้ <summary> และ </summary> เนื่องจากเป็น 'สันนิษฐาน')
ShdNx

7
เนื่องจากคำตอบนี้เป็นตัวเลือกที่ดีที่สุดแล้วฉันจะเพิ่มความคิดเห็นของฉัน: เมื่อฉันพบว่าข้อมูลสรุปนั้นใช้สำหรับการใช้ภายในและโครงการของฉันมีขนาดใหญ่ขึ้นในปัจจุบันฉันดีใจที่พบคุณลักษณะนี้ การจดจำว่าวิธีการและชั้นเรียนของฉันกำลังกลายเป็นความท้าทายที่ยิ่งใหญ่และการจัดทำเอกสารรหัสผ่านกลไกนี้ทำให้สิ่งต่าง ๆ ง่ายขึ้นมากทำให้ฉันสามารถมุ่งเน้นไปที่รหัสใหม่และความสามารถในการยืดหยุ่นแทนการพยายามจดจำสิ่งที่ทำ
JYelton

3
มีเพียงสิ่งเดียวที่จะเพิ่มความคิดเห็นเหล่านี้ไม่ได้รวบรวมไว้ใน dll คุณต้องส่งไฟล์ xml ที่เกี่ยวข้องกับ dll ของคุณ
Benjol

พวกมันมีประโยชน์ แต่มันทำให้ class ปัจจุบันอ่านไม่ได้มาก ฉันหวังว่าจะมีวิธีอื่นที่ไม่ทำให้ยุ่งเหยิงรหัส
Jeroen van Langen

16

ใช่ใช้สิ่งเหล่านี้กับทุกสิ่งที่คุณต้องการเก็บไว้หรืออาจถูกแชร์

นอกจากนี้ให้ใช้ร่วมกับSandcastleและตัวสร้างไฟล์ช่วยเหลือ Sandcastleซึ่งใช้เอาต์พุต XML และแปลงเป็นเอกสาร MSDN สไตล์ที่สวยงาม

สถานที่สุดท้ายที่ฉันทำงานเราสร้างเอกสารขึ้นใหม่ทุกคืนและโฮสต์เป็นหน้าแรกภายใน ชื่อย่อของ บริษัท คือ MF ดังนั้นจึงเป็น MFDN;)

โดยปกติแล้วฉันจะสร้างไฟล์. chm ซึ่งแบ่งปันได้อย่างง่ายดาย

คุณจะประหลาดใจที่คุณติดการบันทึกทุกอย่างเมื่อคุณเริ่มเห็นมันในรูปแบบ MSDN!


1
ลิงก์ไปยังบล็อกดูเหมือนจะตายแล้ว (โพสต์ล่าสุดเมื่อ 5 ปีที่แล้วโดยมี html ที่เสียหายทั่วหน้า) และที่ตั้งของโครงการได้ย้ายไปแล้ว คุณมีลิงค์อัปเดตสำหรับ Sandcastle หรือไม่?

12

หากมาตรฐานการเข้ารหัสของคุณต้องการให้คุณใช้ความคิดเห็นดังกล่าว (และมาตรฐานการเข้ารหัสสำหรับ API หรือกรอบงานอาจต้องการสิ่งนั้น) คุณไม่มีทางเลือกคุณต้องใช้ความคิดเห็นดังกล่าว

มิฉะนั้นให้พิจารณาอย่างจริงจังโดยไม่ใช้ความคิดเห็นดังกล่าว คุณสามารถหลีกเลี่ยงได้ในกรณีส่วนใหญ่โดยการเปลี่ยนรหัสของคุณเช่นนี้:

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

    }

ไปยัง

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

    }

ไปยัง

    public bool IsAuthorizedToAccessResource( User user ) {

    }

11
ในขณะที่ฉันเห็นด้วยรหัสควรเอกสารด้วยตนเองบ่อยที่สุดฉันขอแนะนำให้ใช้ความคิดเห็นประเภทนี้เมื่อใดก็ตามที่เป็นไปได้ (และบ่อยกว่า // ความคิดเห็นทั่วไป) ความคิดเห็น /// XML ได้รับการออกแบบมาเพื่อทำงานกับ IntelliSense ซึ่งสามารถทำให้การพัฒนาง่ายขึ้นเป็นเดือน ๆ เมื่อคุณพยายามใช้ไลบรารี่ที่คุณสร้างขึ้นและจำไม่ได้ว่ามันใช้งานได้อีกต่อไป
Matt DiTrolio

2
และฉันคิดว่าไม่เพียง แต่จากมุมมองของ Intellisense จากมุมมองการสร้างเอกสารอัตโนมัติเช่นกันความคิดเห็น xml นั้นมีประโยชน์ แต่เช่นเดียวกับความคิดเห็นทั้งหมดนี้จะทำให้รู้สึกว่าความคิดเห็นตัวเองมีประโยชน์และมีการเพิ่มรหัสเอกสารด้วยตนเอง
Vaibhav

5
ฉันยอมรับว่าเมื่อคุณเขียนคลาสสาธารณะของ API หรือเฟรมเวิร์กมาตรฐานการเข้ารหัสควรกำหนดให้คุณใส่ความคิดเห็นในรหัสเพื่อให้ IntelliSense และเครื่องมือเอกสารสามารถเชื่อมต่อได้ แต่นั่นไม่ใช่รหัสทั้งหมด นอกเหนือจากความกังวลนั้นวิธีการที่ฉันเรียกร้องที่นี่คือเมื่อคุณพยายามทำให้โค้ดของคุณสะอาดและชัดเจนยิ่งขึ้นให้เน้นที่โค้ดนั้นไม่ใช่ความคิดเห็นที่อธิบายถึงโค้ด
azheglov

3
@JYelton: ความคิดเห็นของคุณแสดงคำตอบของฉันผิด ฉันบอกเป็นนัย ๆ ถึงชื่อที่มีความหมายมากกว่า แต่ไม่จำเป็นต้องเป็นชื่อที่ละเอียดมากนักแน่นอนไม่ใช่ตัวระบุ 60 ตัวสำหรับฟังก์ชั่นสาธารณะที่เรียกกันบ่อย ๆ นอกจากนี้คุณมีสิ่งที่ดูเหมือนจะเป็นฟังก์ชั่นที่มีความเชี่ยวชาญสูง แต่ใช้ชนิดข้อมูลทั่วไปมาก (XmlDocument) - นั่นคือกลิ่นรหัสเดียว จากนั้นตัวระบุ 60 ตัวของคุณจะอธิบายว่า "อย่างไร" และไม่ใช่ "อะไร" - ของวิธีสาธารณะ นั่นคือกลิ่นอื่น ข้อความหลักคือ: คิดก่อนเกี่ยวกับรหัสไม่ใช่ความคิดเห็น
azheglov

2
@JYelton ปัญหาเกี่ยวกับชื่อเมธอดของคุณไม่ใช่ว่าเป็นการอธิบาย แต่เป็นการอธิบายอย่างน้อย 2 การดำเนินการที่แยกจากกัน
โอนีล

4

คลาสวิธีการและการตั้งชื่อทรัพย์สินของคุณควรปรากฏชัดในตัวเองดังนั้นหากคุณต้องการสิ่งเหล่านี้อาจเป็นกลิ่น

อย่างไรก็ตามฉันขอแนะนำให้ใช้กับคลาสสาธารณะวิธีการและคุณสมบัติใน API ห้องสมุด ฯลฯ อย่างน้อยที่สุดพวกเขาจะสร้างเอกสารเพื่อช่วยให้นักพัฒนาซอฟต์แวร์ใช้งานมันและจะป้องกันไม่ให้คุณมี เพื่อเขียน

แต่อย่างไรก็ตามคุณฝานมันรักษาหรือลบออก


11
การตั้งชื่อเป็นสิ่งหนึ่ง แต่การ จำกัด ข้อ จำกัด ของพารามิเตอร์หรือข้อยกเว้นที่อาจเกิดขึ้นนั้นยังมีค่า
อดัมเลียร์

ใช่ฉันจะยอมรับว่าคุณมีประเด็น แต่ส่วนใหญ่แล้วข้อ จำกัด ของพารามิเตอร์นั้นชัดเจนหรือไม่
John MacIntyre

ไม่แน่ใจว่าฉันเห็นด้วยกับจอห์น ด้วยตรรกะนี้ไม่มีวิธีการใด ๆ กรอบ. สุทธิควรได้รับความช่วยเหลือ Intellisense
Vaibhav

1
@vaibhav - ฉันพูดว่า "ฉันขอแนะนำให้ใช้ในคลาสสาธารณะวิธีและคุณสมบัติใน API ห้องสมุด ฯลฯ ... " ... ที่จะครอบคลุมสิ่งที่คุณกำลังพูดถึงใช่ไหม
John MacIntyre

1
@ จอห์น - แปลกฉันอาจสาบานว่าฉันอ่านอย่างอื่นทั้งหมดเมื่อฉันเขียนความคิดเห็นนั้น เพราะย่อหน้าที่สองของคุณเป็นสิ่งที่ฉันพูดที่อื่นในกระทู้นี้ ดังนั้นฉันจะต้องมีหินในหัวของฉันสำหรับการเขียนความคิดเห็นที่ ใช่ฉันเห็นด้วยกับที่
Vaibhav

2

หากคุณพบว่าคุณต้องย้อนกลับไปและแก้ไขความคิดเห็นของคุณเพื่อให้สอดคล้องกับรหัสใหม่คุณอาจทำผิดในตอนแรก องค์ประกอบสรุปควรมีสิ่งนั้น - สรุป - อะไรคือสาเหตุของสิ่งที่คุณกำลังสรุป

อธิบายว่าการทำงานในความคิดเห็นละเมิด DRY อย่างไร หากรหัสของคุณไม่สามารถอธิบายตัวเองได้พอสมควรคุณควรกลับไปทำซ้ำอีกครั้ง


1

ใช่ฉันได้สร้างพวกเขา [เมื่อสร้างระบบใหม่ตั้งแต่เริ่มต้น]

ไม่ฉันไม่เคยได้รับประโยชน์จากพวกเขา [เมื่อทำงานกับระบบที่มีอยู่ซึ่งต้องการการบำรุงรักษา]

ฉันพบว่าความคิดเห็น "สรุป" ในที่สุดมีแนวโน้มที่จะไม่ตรงกับรหัส และเมื่อฉันสังเกตเห็นความคิดเห็นที่ประพฤติตัวไม่ดีฉันมักจะสูญเสียศรัทธาในความคิดเห็นทั้งหมดในโครงการนั้น - คุณไม่แน่ใจว่าจะเชื่อใจคนใด


ความคิดเห็นที่ค้างอาจถือได้ว่าเป็นกลิ่นรหัสแม้ว่าจะมากกว่านั้นในระดับสรุป หากนักพัฒนาซอฟต์แวร์รายอื่นกำลังเปลี่ยนฟังก์ชั่นและไม่อัพเดทข้อมูลสรุปของสิ่งที่พวกเขากำลังทำอยู่ผู้ใช้อาจโต้แย้งว่าพวกเขาไม่ได้จัดทำเอกสารอย่างถูกต้อง
rjzii

1

การลืมทำสิ่งใดไม่ทำให้ความคิดแย่ ลืมที่จะอัพเดทเอกสารใด ๆ คือ ฉันพบว่าสิ่งเหล่านี้มีประโยชน์มากในการเขียนโปรแกรมของฉันและผู้ที่สืบทอดโค้ดของฉันต้องขอบคุณพวกเขา

มันเป็นหนึ่งในวิธีที่ชัดเจนที่สุดในการจัดทำรหัสของคุณ

มันเป็นความเจ็บปวดที่จะต้องค้นหาซอร์สโค้ดเพื่ออ่านเอกสารแบบอินไลน์หรือขุดเอกสารที่ทำมากกว่ารหัสที่ทำ หากคุณมีสิ่งที่มีประโยชน์ปรากฏขึ้นผ่านสติปัญญาแล้วคนจะรักคุณ


1

" จะต้องมีการใช้งานเป็นอย่างมากเช่นฉัน;) "

ฉันเคยเล่นกับความคิดเห็น (///) สำหรับชั้นเรียนคุณสามารถแสดงความคิดเห็นแบบนี้ได้

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

แต่สำหรับวิธีการที่คุณสามารถเพิ่มเติมได้ด้วยการให้คำอธิบายสำหรับพารามิเตอร์และประเภทผลตอบแทน

/// <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)
{

คุณสามารถใช้ทางลัดในการสร้างความคิดเห็น(///+Tab)นี้


0

ใช้พวกเขายกเว้นสำหรับห้องสมุด

นั่นคือเวลาที่พวกเขามีประโยชน์ เมื่อเปิดการสร้างเอกสาร XML และการอ้างอิงไปยังแอสเซมบลีโดยไม่มีโครงการจะแสดงรายละเอียดเพิ่มเติมในระบบ Intellisense

แต่สำหรับ internals ของโครงการปัจจุบันพวกเขาเพิ่งเข้ามา


0

ฉันใช้พวกเขา แต่อย่างที่คนอื่นพูดไม่ได้ครอบคลุม สำหรับวิธีการขนาดเล็กพวกเขาสามารถใหญ่กว่ารหัสที่พวกเขาอธิบายได้ง่าย พวกเขามีประโยชน์มากที่สุดสำหรับการสร้างเอกสารที่สามารถมอบให้กับผู้ที่เพิ่งเริ่มใช้งานระบบได้ แม้ว่าในฐานะโปรแกรมเมอร์เรามักจะสามารถตรวจสอบสิ่งที่รหัสบางอย่างสำหรับมันเป็นเรื่องดีที่มีความคิดเห็นที่จะแนะนำเราและทำหน้าที่เป็นไม้ยันรักแร้ ถ้ามันมีที่จะเขียนลงที่ไหนสักแห่งแล้วในรหัสเป็นสถานที่ที่มันมีแนวโน้มที่จะปรับปรุงอยู่ (จะมีโอกาสมากกว่าบางเอกสาร Word ลอยรอบ)


0

ฉันใช้เทียบเท่าใน VB (เนื่องจากพวกเขาจะไม่ให้ฉันใช้ C # - เห็นได้ชัดว่ามันยากเกินไป ... ไม่มีความคิดเห็น) ฉันพบว่าพวกเขาสะดวกมาก เวลาส่วนใหญ่ที่ฉันรอจนกว่าขั้นตอนหรือฟังก์ชั่นจะเสร็จสมบูรณ์ค่อนข้างมากก่อนที่จะใส่พวกเขาหากเพียงเพื่อหลีกเลี่ยงการเปลี่ยนความคิดเห็น - หรือให้พวกเขา "ซิงค์"

ฉันไม่จำเป็นต้องเขียนนวนิยาย - แค่พื้นฐานคำอธิบายพารามิเตอร์และคำพูดบางอย่าง (โดยปกติเมื่อมีบางสิ่งที่ "ผิดปกติ" เกิดขึ้นที่นั่น - วิธีแก้ปัญหาหรืออึอื่น ๆ ที่ฉันไม่ได้มี แต่มี ไม่มีทางเลือก "สำหรับตอนนี้") (ใช่ฉันรู้ว่า "สำหรับตอนนี้" สามารถปีที่ผ่านมา)

ฉันหงุดหงิดอย่างรุนแรงจากรหัส uncommented ที่ปรึกษาเขียนรุ่นแรกของหนึ่งในองค์ประกอบของเราและไม่ได้แสดงความคิดเห็นอะไรและการเลือกชื่อของเขาจะเป็นที่ต้องการที่นี่และที่นั่น เขาหายไปนานกว่าหนึ่งปีและเรายังคงคัดแยกสิ่งของของเขา (นอกเหนือจากการทำงานกับสิ่งของของเราเอง)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.