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


10

ฉันแสดงของรหัสเอกสารอย่างถูกต้องและผมตระหนักดีถึงข้อเสียเป็นไปได้ของมัน นั่นอยู่นอกขอบเขตของคำถามนี้

ฉันชอบที่จะปฏิบัติตามกฎของการเพิ่มความคิดเห็น XMLสำหรับสมาชิกสาธารณะทุกคนพิจารณาว่าฉันชอบ IntelliSense ใน Visual Studio มากแค่ไหน

มีรูปแบบหนึ่งของความซ้ำซ้อนซึ่งแม้กระทั่งผู้วิจารณ์ที่มากเกินไปอย่างฉันก็ใส่ใจด้วย ตัวอย่างเช่นใช้List.Exists ()

/// <summary>
///     Determines whether the List<T> contains elements
///     that match the conditions defined by the specified predicate.
/// </summary>
/// <returns>
///     true if the List<T> contains one or more elements that match the
///     conditions defined by the specified predicate; otherwise, false.
/// </returns>
public bool Exists( Predicate<T> match )
{
    ...
}

Summaryและreturnsโดยทั่วไปก็พูดในสิ่งเดียวกัน ฉันมักจะเขียนบทสรุปเพิ่มเติมจากreturnsมุมมองโดยวางreturnsเอกสารโดยรวม

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

นอกจากนี้เอกสารผลตอบแทนที่ไม่ปรากฏขึ้นใน IntelliSense ดังนั้นผมค่อนข้างเขียนข้อมูลใด ๆ summaryที่เกี่ยวข้องทันที

  1. ทำไมคุณจำเป็นต้องเอกสารreturnsแยกจากsummary?
  2. ข้อมูลใด ๆ เกี่ยวกับสาเหตุที่ Microsoft รับรองมาตรฐานนี้

คำตอบ:


3

คุณสามารถอนุมานจากอีกหนึ่ง แต่ผู้ที่ยังคงอยู่สองส่วนแยกจากกันเพราะมันจะช่วยให้มุ่งเน้นไปที่หนึ่งซึ่งสนใจคนเมื่อตรวจสอบ / ใช้รหัส

ยกตัวอย่างของคุณฉันอยากจะเขียน:

/// <summary>
/// Determines whether the List<T> contains elements that match the conditions
/// defined by the specified predicate.
/// </summary>
/// <returns>
/// A value indicating whether at least one element matched the predicate.
/// </returns>
public bool Exists(Predicate<T> match)
{
    ...
}
  • หากฉันตรวจสอบโค้ดนี้และต้องการทราบว่าวิธีการนี้เป็นอย่างไรฉันอ่านบทสรุปและนั่นคือทั้งหมดที่ฉันสนใจ

  • ทีนี้ลองจินตนาการว่าฉันกำลังใช้วิธีการของคุณและค่าตอบแทนที่ฉันได้รับนั้นแปลกมาก ตอนนี้ฉันไม่ต้องการที่จะรู้ว่าวิธีการทำอะไร แต่ฉันต้องการที่จะรู้อะไรบางอย่างเกี่ยวกับค่าตอบแทน ที่นี่มี<returns/>ส่วนช่วยและฉันไม่จำเป็นต้องอ่านบทสรุป

ในตัวอย่างนี้อีกครั้งคุณสามารถอนุมานสรุปจาก<returns/>และสรุปค่าส่งคืนที่คาดหวังจากสรุป แต่เมื่อนำอาร์กิวเมนต์เดียวกันไปสู่จุดสูงสุดไม่จำเป็นต้องจัดทำเอกสารวิธีการของคุณเลยในกรณีนี้: ชื่อของวิธีการที่ใส่เข้าไปข้างในList<T>โดยPredicate<T> matchที่อาร์กิวเมนต์ตัวเดียวนั้นค่อนข้างชัดเจน

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


1
คุณกำลังเรียกใช้วิธีการและคุณไม่ต้องการที่จะรู้ว่ามันทำอะไร!
jk

1
@jk: เขาหมายถึงว่าเขาทำมาก่อนแล้ว เมื่อล้มเหลวเท่านั้นเขาต้องการ 'มุ่งเน้น' ในค่าที่ส่งคืน +1 สำหรับย่อหน้าสุดท้ายนั่นคือสิ่งที่ฉันรู้สึกเช่นกัน แม้ถ้าเอกสารระบุความจริงที่เห็นได้ชัดเช่นในตัวอย่างของฉันก็ให้ความมั่นใจกับผู้อ่านของความคาดหวังของเขา เมื่อความคิดเห็นได้รับการจัดการอย่างถูกต้องจะมีข้อความแจ้งว่า: "วิธีนี้คิดออกมาอย่างเหมาะสมและไม่ได้ทำอะไรมากไปกว่าที่กล่าวไว้ในที่นี้" เช่นเดียวกับในเอกสารของ msdn
Steven Jeuris

2

การใช้งานของฉัน:
<summary>อธิบายสิ่งที่วิธีการ (เพื่อรับ<returns>)
<returns>อธิบายถึงค่าตอบแทน

เชื่อมโยงไปยัง <summary>MSDN:<returns>


ขอบคุณสำหรับลิงค์ แต่ไม่มีเอกสารใดของ msdn ที่summaryระบุว่า 'วิธีการทำอะไร' ฉันลงคะแนนจนกว่าคุณจะใช้เวลาในการอัปเดตคำตอบของคุณเพื่อชี้แจงความแตกต่างระหว่างสิ่งที่ msdn ระบุและสิ่งที่คุณกำหนดให้เป็น ; p
Steven Jeuris

2
ไม่ว่า MSDN จะพูดอะไรเกี่ยวกับเรื่องนี้หรือไม่นี่เป็นแนวทางที่ดีจริงๆ ในตัวอย่างของคุณคุณไม่จำเป็นต้องทำซ้ำข้อมูลสรุปทั้งหมดคุณสามารถพูดว่า "ส่งคืนtrueหากคำกริยานั้นตรงกัน" หากใครต้องการรู้ว่าสิ่งใดที่เป็นการแข่งขันพวกเขาสามารถอ่านส่วนที่เหลือของเอกสาร
Blrfl

@Blrfl: ฉันไม่ได้บอกว่าแนวทางผิด ฉันกำลังบอกว่ามันผิดที่จะอ้างอิงแหล่งที่มาซึ่งหมายความว่ามีบางอย่างเขียนอยู่ที่นั่นเมื่อมันไม่ได้เป็น ดังนั้นการลงคะแนน ฉันอยากจะเห็นคำตอบนี้แก้ไขมาก
Steven Jeuris

@StevenJeuris: ลิงก์ไปยังเอกสาร MSDN เป็นเพียงข้อมูลเพิ่มเติม MSDN ไม่ได้พูดว่า "เมื่อคุณมี<summary>และ<returns>ทำสิ่งนี้" ดังที่ Blrfl กล่าวนี่เป็นเพียงแนวทางหนึ่งที่อาจใช่หรือไม่ต้องการใช้
Jake Berger

1
@ สตีเฟ่น Jeuris: ถึงแม้ว่าเพราะมันเป็นวิธีการเขียนฉันสามารถดูว่าบางคนอาจอนุมานว่ามันมาจาก MSDN
Jake Berger

1

ทำไมคุณถึงต้องส่งคืนเอกสารแยกต่างหากจากการสรุป

ฉันคิดว่าถ้าส่วนสรุปยาวจริงๆและเป็นคำอธิบายอาจเป็นประโยชน์ที่จะมีส่วนแยกสั้น ๆ ส่งคืนส่วนท้าย

ฉันมักจะเขียนเพียง<summary>บางส่วนในรหัสของฉันเองตามที่คุณพูดว่า "คืน_ "

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


1

เมื่อไม่นานมานี้ฉันถูกฉีกด้วยคำถามเชิงปรัชญาที่เหมือนกันและฉันก็ยังไม่แน่ใจว่าทางออกที่ดีคืออะไร แต่จนถึงบัดนี้นี่เป็นแนวทางของฉัน ...

  • เอกสารวิธีการอธิบายสิ่งที่ผู้โทรภายนอกจำเป็นต้องรู้เท่านั้น มันไม่ได้พูดเกี่ยวกับวิธีการทำงานภายใน แต่กล่าวถึงก) สาเหตุที่ผู้โทรต้องการเรียกวิธีการนี้ข) สิ่งที่จะเป็นผลที่คาดว่าจะได้จากวิธีการโทร หากมีความจำเป็นต้องจัดทำเอกสารวิธีการทำงานของระบบฉันใส่มันลงในส่วนของโค้ดเอง
  • หากวิธีการมีความซับซ้อนเพียงพอกับมันแล้วคำอธิบายทั่วไปและส่วน [ส่งคืน] ดูเหมือนจะเป็นธรรม คุณไม่ต้องการให้ผู้อ่านอ่านคำอธิบายทั้งหมดและพยายามอนุมานวิธีตีความค่าตอบแทน
  • หากวิธีการนั้นง่ายมากจนเป็นวิธีที่ดีที่สุดในการอธิบายสิ่งที่กล่าวคือ "วิธีนี้ส่งคืนที่อยู่ของบุคคล" ฉันก็ข้ามส่วน [ส่งคืน] เนื่องจากการเพิ่มดูเหมือนจะขัดกับหลักการของ DRY และฉัน ผู้สนับสนุนรายใหญ่ของเรื่องนี้ วิธีการเข้าถึงหนึ่งซับจำนวนมากดูเหมือนจะตกอยู่ในหมวดหมู่นี้

ใช่ฉันสามารถเชื่อมต่อกับจุดที่กล่าวถึงและตามมากขึ้นหรือน้อยลง ปัญหาคือว่าเป็นเรื่องที่ค่อนข้างอัตนัยซึ่งอาจเป็นเหตุผลว่าทำไมไมโครซอฟท์เพิ่งเลือกที่จะเพิ่มreturnsแทนเสมอ ฉันยังสังเกตเห็นว่าพวกเขาใช้สูตรเดียวกันเสมอเช่น"จริงถ้า ... ; ไม่เช่นนั้นเป็นเท็จ " สำหรับค่าส่งคืนบูลีน ฉันสงสัยว่าพวกเขาได้ระบุอนุสัญญาฉบับนั้นด้วยหรือไม่
Steven Jeuris

0

ข้อมูลสรุปควรมีความหมายเท่าที่ควรจะเป็นประโยชน์ คำอธิบายของพารามิเตอร์และค่าส่งคืนควรสั้นและหวาน หากคุณมีตัวเลือกระหว่างหนึ่งคำถึงห้าคำให้ใช้หนึ่งคำ ลองยกตัวอย่างของคุณ:

true ถ้ารายการมีหนึ่งองค์ประกอบขึ้นไปที่ตรงกับเงื่อนไขที่กำหนดโดยเพรดิเคตที่ระบุ มิฉะนั้นเป็นเท็จ

กลายเป็น

จริงถ้าองค์ประกอบของรายการใดตรงกับกริยา; เท็จอย่างอื่น


อันที่จริงการเขียนมันเหมือนว่าเพิ่งทำฉันตระหนักถึงประโยชน์ของวิธีการมาตรฐานไมโครซอฟท์เริ่มต้นด้วย"กำหนดว่า ..." ฉันรู้สึกว่าอ่านง่ายขึ้นตั้งแต่แรกอธิบายว่ามันทำอะไรก่อนที่จะบอกว่าผลลัพธ์ของมันคืออะไร นั่นคือการอ้อมน้อยลงหนึ่งขั้น ฉันยอมรับว่าreturnsจาก Microsoft นั้นยาวเกินไป ถ้ามันควรจะทำอะไรมันก็แค่ให้ความมั่นใจว่าความจริงหมายถึงมันตรงกับและเป็นเท็จที่มันไม่
Steven Jeuris
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.