หนึ่งความคิดเห็นควรแตกต่างกันในภาษาที่ใช้งานได้หรือไม่? [ปิด]


25

ฉันเพิ่งเริ่มต้นกับการเขียนโปรแกรมการทำงานและฉันสงสัยเกี่ยวกับวิธีที่ถูกต้องในการแสดงความคิดเห็นรหัสของฉัน

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

วิธีที่ถูกต้องในการแสดงความคิดเห็นโปรแกรมการทำงานคืออะไร? ฉันควรใช้วิธีการเดียวกันในการเขียนโปรแกรมซ้ำหรือไม่


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

2
ฉันไม่เห็นด้วย. เนื่องจาก langages ที่ใช้งานได้ไม่มีผลข้างเคียงที่คุณรู้ว่ามันจะทำอะไรในท้ายที่สุดคืนค่าด้วยลายเซ็นที่กำหนด
Tom Squires

8
ไม่ใช่ภาษาที่ใช้งานได้จริงล้วน แต่มีผลข้างเคียง
Thanos Papathanasiou

1
แต่วิจารณ์สิ่งที่คุณรู้สึกเพื่อแสดงความคิดเห็น ... นี่คือการคิด
gd1

1
โครงการของคุณเสี่ยงต่อการมีสมาชิกคนอื่นที่ไม่คุ้นเคยกับภาษาที่ใช้งานได้หรือไม่? พวกเขาอาจต้องการความช่วยเหลือเป็นพิเศษ
JeffO

คำตอบ:


84

ชื่อฟังก์ชั่นควรพูดในสิ่งที่คุณกำลังทำ

การใช้งานจะบอกคุณว่าคุณกำลังทำอะไรอยู่

ใช้ความคิดเห็นเพื่ออธิบายว่าทำไมคุณถึงทำเช่นนั้น


1
คำตอบที่ดีมันช่วยให้ฉันเห็นโค้ดที่เกลื่อนไปด้วยความคิดเห็นที่อธิบายว่าอะไรและอย่างไร (ซึ่งเห็นได้จากโค้ดเอง) แต่ทิ้งฉันให้เดาว่าทำไม
Eric Wilson

32
และสิ่งนี้เป็นจริงโดยไม่คำนึงถึงกระบวนทัศน์
jk

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

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

2
ชื่อฟังก์ชั่นควรอธิบายว่าทำไมมันถึงทำ - เมื่อเป็นไปได้
Yam Marcovic

14

มีแน่นอนเป็นจุดในคำถามนี้เป็นโปรแกรมที่ทำงานมักจะอยู่ในระดับที่เป็นนามธรรมที่แตกต่างกว่าคนที่มีความจำเป็น

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

// map 'toUpperCase' over 'container' yielding 'result'
Container result = new Container();
for (int i=0; i < container.size(); i++) { 
             result.addToTail(container.atElement(i).toUpperCase());
}

แต่นี่เป็นเรื่องไร้สาระอย่างชัดเจนในภาษาที่ใช้งานได้:

-- map 'toUpperCase' over 'list'
let result = map toUpperCase list

ที่ดีกว่า:

-- we need the FooBars in all uppercase for the Frobnitz-Interface
let result = map toUpperCase list

8
คุณปู่มักจะบอกให้ฉันทำเอกสารทำไมแทนที่จะเป็นอะไร ดังนั้นฉันจะใช้รุ่นสุดท้ายสำหรับรหัสที่จำเป็นเช่นกัน
Simon Bergot

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

11

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


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

3

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

// returns a list of Employees    <-- not necessary
def GetEmployeeList: ...

// returns a list of Employees sorted by last name    <-- necessary
def GetEmployeeList: ...

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


2

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

ที่กล่าวว่าผมไม่เห็นเหตุผลว่าทำไมความคิดเห็นควรต่อ seจะแตกต่างกันในภาษาทำงาน


1

ฉันใช้แนวทางเดียวกันในการบันทึกรหัสทั้งหมดของฉัน:

  • ใช้ชื่อที่สื่อความหมาย
  • เพิ่มความคิดเห็นก่อนตรรกะที่ซับซ้อนพอสมควรหากตรรกะที่ซับซ้อนไม่สามารถหลีกเลี่ยงได้
  • เขียนภาพรวมของทั้งระบบ

หากชื่อและประเภทลายเซ็นไม่ได้บอกคุณอย่างชัดเจนว่าฟังก์ชันทำอะไรคุณมักทำผิด


0

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

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