ความคิดเห็นเป็นรูปแบบของเอกสารหรือไม่


11

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

จะไม่นี้:

$foo = "bar"; # this is a comment
print $foo; # this prints "bar"

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


11
หากคุณกำลังใช้ระบบการสร้างเอกสารเช่น JavaDocs หรือ Doxygen ความคิดเห็นนั้นเป็นเอกสารอย่างแท้จริง
Gort the Robot

5
YANGNI ( xprogramming.com/Practices/PracNotNeed.html ) เอกสารรหัสของคุณเพื่อความพึงพอใจของคุณ ให้ลูกค้า (ถ้ามี) จ่ายให้คุณเขียนเอกสารเพื่อความพึงพอใจของพวกเขา ไม่ต้องกังวลกับสิ่งที่ผู้คนจำนวนมากที่คุณพูดคุยจะพูด (เว้นแต่พวกเขาจะจ่ายเงินให้คุณ)
emory

1
จากความคิดเห็นของคุณ 2 ข้อข้อที่ 2 นั้นไม่มีประโยชน์ทำไมไม่ลองเปลี่ยน $ foo เป็น bar หากไม่เป็นเช่นนั้นความคิดเห็นนั้นผิด ความคิดเห็นแรกไม่ถูกต้อง มันคือการมอบหมาย
ctrl-alt-delor

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

2
คือ YANGNI "คุณไม่ต้องการมันหรอกหรือ"
Chris S

คำตอบ:


27

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

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


3
"สำหรับโครงการส่วนใหญ่ความคิดเห็นเป็นรูปแบบหลักของเอกสารโครงการ (ถ้าไม่เฉพาะ)" - ล่อลวงให้ลงคะแนนสำหรับเรื่องนี้ แต่น่าเสียดายที่ต้องยอมรับว่าเป็นข้อความที่แท้จริง ฉันหวังว่ามันไม่ได้เป็นความตั้งใจของคุณที่จะอ้างว่านี่คือสิ่งที่ควรจะเป็น
Edward Strange

2
ฉันไม่เห็นด้วยกับสิ่งนี้จริงๆเพราะคุณมีเอกสารที่เชื่อถือได้เท่านั้นคือซอร์สโค้ดเอง ทั้งความคิดเห็นและ "เอกสาร" จะต้องได้รับการดูแลด้วยรหัสซึ่งไม่ค่อยเกิดขึ้น ดังนั้นแหล่งเอกสารที่เชื่อถือได้เพียงอย่างเดียวคือรหัสของคุณ!
martiert

3
@ Smartiert ฉันเคยรู้สึกแบบเดียวกัน แต่ฉันพบว่ามันไม่ได้ผลเหมือนกันในทางปฏิบัติ ความคิดเห็น "ทำไม" ทั้งหมดนั้นชัดเจนกว่าความคิดเห็นมากกว่าการพยายามแยกความรู้ "ทำไม" จากโค้ด แน่นอนว่าสามารถใช้รหัสเอกสารด้วยตนเอง (และควร) เพื่อลบความคิดเห็นส่วนใหญ่แต่บางครั้งความคิดเห็นนั้นเป็นวิธีที่ง่ายที่สุดชัดเจนที่สุดและใช้เวลาอย่างมีประสิทธิภาพที่สุดในการจัดทำเอกสารบางอย่าง
Oleksi

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

3
นอกจากนี้โปรดทราบว่าความคิดเห็นในหลาย ๆ ภาษานั้นถูกใช้เพื่อสร้างเอกสารจริง ... ดังนั้นจึงมักจะเป็นแบบเดียวกัน ดู MSDN เป็นตัวอย่าง
Steven Evers

12

พวกเขาเป็นรูปแบบของเอกสาร แต่จำไว้ว่าเอกสารนั้นอยู่ในสายตาของคนดู ....

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

  • สำหรับผู้ที่ดูซอร์สโค้ด แต่มีความเชี่ยวชาญด้านเทคนิคน้อยกว่าความเห็นอาจไม่เป็นไร แต่นั่นถือว่ามีบางคนกำลังดูซอร์สโค้ด

  • หากคุณเป็นช่างเทคนิค แต่ไม่มีเวลาที่จะอ่านซอร์สโค้ดทั้งหมดคู่มือทางเทคนิคอาจเป็นสิ่งที่จำเป็น

  • ถ้าผู้ใช้ขาดทักษะด้านเทคนิค แต่เพียงต้องการรู้ว่าเกิดอะไรขึ้นเอกสารของผู้ใช้คือสิ่งที่จำเป็น

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


17
รหัสเอกสารด้วยตนเองเป็นเรื่องโกหก
yannis

1
@YannisRizos เป็นเหมือนเป้าหมายที่ไม่สามารถบรรลุได้มากกว่าการโกหกโดยฉับพลัน
เปลวไฟของ Ptharien

2
@ YannisRizos: คุณอาจจะถูก แต่โค้ดที่ต้องการความคิดเห็นจำนวนมากเกือบจะเป็นรหัสที่ไม่ดีมากและสามารถเขียนได้ในลักษณะที่ต้องการความคิดเห็นน้อยกว่า
Doc Brown

9
@DocBrown ขึ้นอยู่กับ ฉันเคยเห็นคนที่ทำเอกสารเกี่ยวกับลูปและฉันเห็นคนที่อ้างว่าตรรกะทางธุรกิจ 100 ตำแหน่งเป็นเอกสารด้วยตนเอง ความจริงก็คือความคิดเห็นที่มากเกินไปไม่สามารถทำร้ายได้ (ยกเว้นถ้าล้าสมัย / ไม่ถูกต้อง) และหากฉันต้องเลือกระหว่างการแสดงความคิดเห็นที่มากเกินไปและรหัสการจัดทำเอกสารด้วยตนเองฉันจะเลือกก่อนเสมอ แน่นอนฉันจะสวยมากชอบความสมดุลและการแสดงความคิดเห็นจุดเช่นOleksi อธิบาย
yannis

1
@MathAttack IDE ที่ดีที่สุดสามารถซ่อน / พับความคิดเห็นได้ แต่ใช่บางครั้งพวกเขาก็เข้าไปในทาง
yannis

3

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

ฉันรู้ว่าคุณหมายถึงมันเป็นตัวอย่างของการทิ้ง แต่สิ่งที่ชอบ

print $foo; # this prints "bar"

ไม่มีประโยชน์ มันเพิ่มความยุ่งเหยิงทางสายตา อย่าบันทึกเอกสารที่ชัดเจน

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

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


3

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

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

... อัตราส่วนของเวลาที่ใช้ในการอ่านและการเขียนดีกว่า 10: 1 เรากำลังอ่านรหัสเก่าอย่างต่อเนื่องซึ่งเป็นส่วนหนึ่งของความพยายามในการเขียนรหัสใหม่

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


2

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

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


1
สิ่งที่ยุ่งยากอย่างแท้จริงควรอยู่ในเอกสารวิชาการ (หรือบางครั้งสิทธิบัตร)
Donal Fellows

2

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

ดูเหมือนว่าคุณจะแสดงความคิดเห็นในสิ่งต่างๆ การมีตัวเลือกอื่นอาจเป็นเรื่องดี ฉันสามารถนึกถึงเอกสารที่ดีกว่าสามแบบ:

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

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

3) สำหรับสคริปต์ตัวเลือก --help นี่คือที่ที่คุณสามารถไปหาเอกสารได้ ลองดูตัวอย่างคาดการณ์สิ่งที่ผู้ใช้ต้องการ

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

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