คู่มือสำหรับผู้เริ่มต้นเพื่อเขียนความคิดเห็น?


27

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

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

คำตอบนี้ :

อย่าแสดงความคิดเห็นว่าคุณกำลังทำอะไร แต่ทำไมคุณถึงทำเช่นนั้น

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

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

อัปเดต : นอกเหนือจากคำตอบที่นี่ฉันคิดว่าคำตอบของคำถามอื่นนั้นมีความเกี่ยวข้องสูง


ฉันคิดว่าเรากำลังก้าวไปสู่โลกที่ผู้คนไม่แสดงความคิดเห็นอีกต่อไป สำหรับที่ดีกว่าของ (มีแนวโน้ม) สำหรับที่เลวร้ายยิ่ง เปรียว
MK01

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

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

โปรดดูเพิ่มเติมที่: “ ความคิดเห็นมีกลิ่นรหัส”
gnat

คำตอบ:


38

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

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


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

2
อีกประเด็นหนึ่งงานแรกของฉันถือว่าความคิดเห็นสำคัญพอ ๆ พยายามทำให้เป็นนิสัยในการอ่านความคิดเห็นรวมถึงรหัสเมื่อคุณตรวจทานและพยายามยืนยันว่าความคิดเห็นนั้นทันสมัยเมื่อใดก็ตามที่เป็นไปได้ สิ่งนี้จะช่วยหลีกเลี่ยงความคิดเห็นที่ค้างอยู่และรักษากฎเกณฑ์ทางธุรกิจและอื่น ๆ ไว้ในรหัสของคุณเป็นปัจจุบัน
Eric Hydrick

10

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


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

รหัสเดียวสามารถพูดได้ว่าไม่ว่าทำไมหรือทำไมไม่ คุณต้องการความคิดเห็นสำหรับสิ่งนั้น

7

Code Complete ดังที่กล่าวมามีแนวทางต่าง ๆ เกี่ยวกับการเขียนความคิดเห็น กล่าวโดยย่อคือ PDL และสามารถสรุปได้ดังนี้:

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

  2. เขียนรหัสเทียม (เช่นความคิดเห็น) ก่อนจากนั้นจึงเขียนรหัสจริงหลังจากที่คุณได้อธิบายกิจวัตร / วิธีการ / ฟังก์ชั่นของคุณเสร็จแล้ว ภาษาที่ใช้นั้นมีระดับสูง แต่มีความเฉพาะเจาะจงดังนั้นจึงค่อนข้างละเอียด

  3. มีความคิดว่าโค้ดของคุณทำอะไรอยู่ก่อนจะเขียนโค้ด

  4. มีความคิดเห็นใกล้เคียงกับรหัสจริง

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

มีลิงค์ที่ GameDev.net [ซึ่งอธิบาย PDL] [1] ในกรณีที่คุณไม่ต้องการติดตามหนังสือเล่มนี้


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

1
นอกจากนี้ความคิดเห็นรหัสเทียมจะบอกคุณว่ารหัสควรทำอย่างไร รหัสควรบอกคุณว่า รหัสหลอกจะไม่บอกคุณว่าทำไมรหัสถึงทำ -1 เพื่อนขอโทษ แต่ฉันไม่สามารถเห็นด้วยกับจุดที่สองเวลามีการเปลี่ยนแปลง
Binary Worrier

1
เพื่อไม่ให้โต้แย้ง แต่มีคำอธิบายเพิ่มเติม - รหัสหลอกคือการอธิบายเจตนาของรหัสที่คุณเขียน ความหมายความคิดเห็นไม่ได้เกี่ยวกับรายละเอียดการใช้งาน (เช่น "เพิ่ม x ไปยังด้านบนสุดของสแต็ก") แต่จะเกี่ยวกับสิ่งที่รหัสควรทำ (เช่น "ทำให้หน้าต่างปรากฏต่อหน้าทุกอย่าง") ในขณะที่คุณชี้ให้เห็นอย่างถูกต้องคุณจะต้องย้ายความคิดเห็นด้วยรหัส ฉันไม่เห็นด้วยกับรหัสสามารถบอกคุณว่ารหัสกำลังทำอะไรอยู่ตลอดเวลา แม้ว่าความคิดเห็นที่เป็นประโยชน์ / ถูกต้อง (ถ้าฉันจัดการเพื่อเขียนมันได้ดี!) ไปไกล ในท้ายที่สุดยังคง IMHO
Extrakun

3
วิธีการหรือฟังก์ชั่นที่เรียกว่าshowWindowOnTop(window)จะดีกว่าความคิดเห็นในลักษณะเดียวกันทั้งหมดนี้ล้าสมัยและคำแนะนำที่ไม่ดีในปี 2012 1) ชื่อฟังก์ชั่น / วิธีการอธิบายเจตนา 2) รหัสหลอกคือการออกกำลังกายกลวงด้วยโซ่เครื่องมือทันสมัย ​​3) การทดสอบจะบอกคุณว่าควรจะทำอย่างไรรหัสก่อนที่คุณจะเขียน 4) รหัสที่มีชื่อดีกว่าความคิดเห็นที่ไม่ตรงกับรหัสที่มีชื่อไม่ดี

6

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


1

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


1
ฮะใช่ ;-) นี่ไม่ใช่คำแนะนำที่เป็นประโยชน์โดยเฉพาะ - บางทีนี่อาจเป็นความคิดเห็นใช่ไหม
คาเมรอน

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

0

ฉันชอบวิธีที่ Evan Todd สรุปมุมมองของเขาในหมวดหมู่ความคิดเห็นที่เป็นประโยชน์เท่านั้น ( อ้างอิงจากบล็อกของเขา ):

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