จำเป็นต้องเขียนความคิดเห็น javadoc สำหรับพารามิเตอร์ EVERY ในลายเซ็นของเมธอดหรือไม่?


17

หนึ่งในทีมของฉันเชื่อว่าจำเป็นต้องเขียนความคิดเห็น javadoc สำหรับพารามิเตอร์ EVERY ในลายเซ็นของเมธอด ฉันไม่คิดว่ามันเป็นสิ่งจำเป็นและอันที่จริงฉันคิดว่ามันอาจเป็นอันตรายได้

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

แต่ฉันคิดว่ามันไม่จำเป็นที่จะทำเช่นนั้นสำหรับพารามิเตอร์ทุกคน หากเห็นได้ชัดว่าพารามิเตอร์สำหรับความคิดเห็น javadoc นั้นซ้ำซ้อน; คุณกำลังสร้างงานพิเศษสำหรับตัวคุณเอง นอกจากนี้คุณกำลังสร้างงานพิเศษสำหรับทุกคนที่ต้องรักษารหัสของคุณ วิธีการเปลี่ยนแปลงเมื่อเวลาผ่านไปและการบำรุงรักษาความคิดเห็นเกือบจะสำคัญเท่ากับการบำรุงรักษาโค้ดของคุณ มีกี่ครั้งที่คุณเห็นความคิดเห็นเช่น "X ทำ Y เพื่อ Z เหตุผล" เพียงเพื่อดูว่าความคิดเห็นนั้นล้าสมัยและในความเป็นจริงวิธีการไม่ได้ใช้พารามิเตอร์ X อีกต่อไป? มันเกิดขึ้นตลอดเวลาเพราะคนลืมที่จะอัพเดทความคิดเห็น ฉันจะยืนยันว่าความคิดเห็นที่ทำให้เข้าใจผิดเป็นอันตรายมากกว่าความคิดเห็นที่ไม่ทั้งหมด และดังนั้นจึงเป็นอันตรายของการแสดงความคิดเห็นมากเกินไป: โดยการสร้างเอกสารที่ไม่จำเป็นคุณจะต้อง

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


Java IDEs จำนวนมาก (โดยเฉพาะอย่างยิ่ง Intellij) จะติดแท็กพารามิเตอร์ Javadoc ที่ขาดหายไปเป็นคำเตือนเกี่ยวกับเอกสาร
Gary Rowe

NetBeans และ Eclipse ก็เช่นกัน
Davor Ždralo

คำตอบ:


38

javadoc (และในคำว่าไมโครซอฟท์ XMLDOC) คำอธิบายประกอบไม่ได้แสดงความคิดเห็นที่พวกเขามีเอกสาร

ความคิดเห็นอาจกระจัดกระจายได้ตามที่คุณต้องการ สมมติว่ารหัสของคุณอ่านได้ครึ่งทางจากนั้นความคิดเห็นทั่วไปเป็นเพียงป้ายบอกทางเพื่อช่วยให้นักพัฒนาในอนาคตเข้าใจ / รักษารหัสที่พวกเขาได้จ้องมองมาเป็นเวลาสองชั่วโมงแล้ว

เอกสารแสดงให้เห็นถึงการทำสัญญาระหว่างหน่วยของรหัสและโทรติดต่อของ มันเป็นส่วนหนึ่งของ API สาธารณะ สันนิษฐานเสมอว่า Javadoc / XMLdoc จะลงเอยในไฟล์ช่วยเหลือหรือในป๊อปอัปการเติมข้อความอัตโนมัติ / intellisense / code-completion และสังเกตได้โดยคนที่ไม่ได้ตรวจสอบภายในของรหัสของคุณ แต่ต้องการใช้เพื่อวัตถุประสงค์บางอย่างของ ด้วยตัวของพวกเขาเอง.

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

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


1
+1: มันสำคัญพอ ๆ กับโค้ด มันไม่มีการทดสอบอัตโนมัติที่ดี
S.Lott

หากพารามิเตอร์สำหรับวิธีการรวมเช่นพิกัด X และ Y สามคู่ซึ่งจะตีความว่าเป็นมุมที่อยู่ติดกันของสี่เหลี่ยมด้านขนานมันมีประโยชน์มากกว่าถ้ามีเอกสารเล็ก ๆ หกชิ้นหนึ่งอันสำหรับแต่ละพารามิเตอร์หรือเพื่ออธิบายวัตถุประสงค์ของ วิธีในรูปของสี่เหลี่ยมด้านขนาน (x1, y1), (x2, y2), (x3, y3) และ (x1 + x3-x2, y1 + y3-y2) [หลังตรงข้าม (x2, y2)]? หากวัตถุประสงค์ของวิธีการที่กำหนดไว้ในแง่ของชื่อพารามิเตอร์ฉันจะคิดว่าเอกสารประกอบเพิ่มเติมเกี่ยวกับพารามิเตอร์ในหลายกรณีจะไม่จำเป็น
supercat

1
@supercat: ฉันขอยืนยันว่าในกรณีเช่นนี้คุณควรทำการ refactoring เช่นคุณมีชนิดข้อมูลเดียวPointและฟังก์ชั่นใช้เวลาเพียงสามPoints(หรือดีกว่ายังอาร์เรย์ / iterable ของพวกเขา) ยิ่งพารามิเตอร์มีวิธีมากเท่าใดก็ยิ่งต้องโทรยากขึ้นและข้อมูลจำเพาะที่ไม่เสถียรก็มีแนวโน้มที่จะกลายเป็นเมื่อเวลาผ่านไป
Aaronaught

@Aaraught: ขึ้นอยู่กับว่าจะใช้วิธีนี้อย่างไร การมีโอเวอร์โหลดที่ได้รับสามPointและอีกอันที่ได้รับParallelogramอาจมีประโยชน์หากผู้โทรจำนวนมากสามารถผ่านสิ่งนั้นผ่าน อย่างไรก็ตามหากมีPointกรณีจำนวนมากที่จะถูกสร้างขึ้นโดยไม่มีจุดประสงค์ แต่ต้องส่งผ่านไปยังวิธีการหนึ่งครั้งจากนั้นการสร้างวัตถุจะทำให้โค้ดทำงานช้าลงและอ่านยากขึ้น ถ้าภาษาที่สนับสนุนมวลซึ่งจะเป็นและประพฤติตัวเป็นพวงของค่าติดอยู่ด้วยกันด้วยเทปพันสายไฟและหนึ่งสามารถผ่านพารามิเตอร์ประเภทรวมเพียงโดย ...
SuperCat

... ล้อมรอบค่าในวงเล็บปีกกาจากนั้นก็อาจจะดีจากทั้งมุมมองประสิทธิภาพและการอ่าน Java ไม่มีแนวคิดดังกล่าว ภาษาที่ใช้ JVM สามารถรองรับสิ่งต่าง ๆ ได้อย่างมีประสิทธิภาพสำหรับพารามิเตอร์ ( Point p1สามารถแปลพารามิเตอร์เป็นint p1_x, int p1_y) ได้ แต่ JVM ไม่มีกลไกที่มีประสิทธิภาพสำหรับฟังก์ชันที่จะส่งคืนสิ่งนั้น
supercat

12

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

จำไว้ว่า: บางสิ่งที่เหมาะสมกับคุณอาจถูกตีความแตกต่างไปจากเดิมอย่างสิ้นเชิงไม่ว่าคุณจะคิดว่ามันธรรมดาแค่ไหน (คิดว่าคนที่ไม่เก่งในการอ่านภาษาอังกฤษและพยายามเข้าใจรหัสของคุณ)

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


10

เริ่มจากสมมติฐานที่ว่าวัฏจักรนักพัฒนาเป็นทรัพยากรที่เราพยายามอนุรักษ์

นั่นหมายความว่า devs ไม่ควรเสียเวลากับการบันทึกพารามิเตอร์ที่เห็นได้ชัดในตัวเองและคืนค่าใช่มั้ย

เรามาทำลายมันกัน

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

หากเราเลือกและเลือกค่าใช้จ่ายคือ:

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

ดังนั้นฉันอยากจะทำเอกสารทุกอย่าง ข้อเสียคือแน่นอน แต่มีอยู่


9

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

สำหรับการบำรุงรักษา Javadoc อย่างถูกต้องคุณต้องใช้เครื่องมือสำหรับการพัฒนาของคุณที่ช่วยคุณในเรื่องนี้ คราสมาถึงใจ แน่นอนถ้าเป็นเรื่องสำคัญคุณต้องให้แน่ใจว่าทุกคนในทีมทำส่วนของพวกเขาเพื่อรักษารหัสรวมถึงความคิดเห็น


3

อย่าลืมว่า javadoc สามารถมองเห็นได้ในขณะที่แยกจากโค้ดตัวอย่างที่สำคัญคือJava APIเอง โดยไม่รวม javadoc สำหรับทุกพารามิเตอร์ในวิธีการที่คุณนำเสนอวิธีการที่ผิดและวิธีการที่อาจนำมาใช้


"a - อาร์กิวเมนต์ที่ต้องพิจารณาค่าสัมบูรณ์" เพิ่มอะไรในเอกสารของ Math.abs หรือไม่
วินไคลน์

@ ไคลน์ไคลน์อาจเป็นประโยชน์สำหรับความคิดที่ยากลำบาก ;-)
Gary Rowe

1

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

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


6
ฉันพบว่าแม้ว่าจะไม่ใช่การเปิดเผยต่อสาธารณะมันช่วยให้ฉันเข้าใจรหัสของตัวเองเมื่อฉันมองย้อนกลับไปหลายปีต่อมา: P
Demian Brecht

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