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

// V1 dot V2 = |V1| |V2| cos theta
// theta = arccos( (V1 dot V2) / (|V1| |V2|) )
return Math.acos((x1 * x2 + y1 * y2) / Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2))) * 180 / Math.PI;

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

// for Internet Explorer compatibility

ในบางโค้ดที่ใช้ Data Structure หลายๆ ชนิด บางครั้งก็มีความจำเป็นต้องคอมเม้นต์ว่า คลาสนี้คลาสนั้นเอาไว้ทำอะไรครับ เช่นในโค้ดของ CoffeeScript:

http://jashkenas.github.io/coffee-script/documentation/docs/nodes.html

ในบางภาษาอาจจะแทบเป็นไปไม่ได้เลยที่จะเขียนโค้ดให้อ่านง่าย (เช่น C) โดยเฉพาะ API ของภาษาอื่นที่เขียนในภาษา C ยิ่งต้องเขียน Comment เลยครับ อย่างเช่น API บางตัวของภาษา Ruby ซึ่งเมื่อเทียบระหว่างอ่าน Comment กับอ่าน Source Code อ่านคอมเม้นต์เข้าใจง่ายกว่าเยอะครับ นอกจากนี้ Comment ยังสามารถบอกกรณีแปลกๆ วิธีพลิกแพลง ประสิทธิภาพ ชนิดของข้อมูลที่ฟังก์ชั่นนี้จะทำงานได้ดี ข้อยกเว้น ข้อจำกัด โดยไม่ต้องให้คนอ่านโค้ดมา Analyze เองครับ:

https://github.com/ruby/ruby/blob/trunk/enum.c
http://www.ruby-doc.org/core-2.0/Enumerable.html
Translate
ถ้าเปรียบโค๊ดโปรแกรมหนึ่งเป็นเหมือนเมืองเมืองหนึ่ง สิ่งที่จะเปรียบเทียบได้กับมลภาวะนั้นก็คือ "comment" ก่อนจะพูดถึงว่าทำไม อยากจะย้อนความกันนิดหนึ่ง comment นั้นคือโค๊ดในส่วนที่ไม่ถูกนำไปแปลไปเป็นชุดคำสั่งที่คอมพิวเตอร์ใช้งาน...
4
Wutipong Wongsakuldej's profile photoRungsimun Saenprasert's profile photo
 
โค๊ดที่คุณยกตัวอย่างมานั้นเป็น compound statement สามารถแยกออกเป็น statement ย่อย ๆ ได้ และ compiler สามารถยุบมันรวมกลับมาเป็น compound statement ได้ครับ (ซึ่งอาจจะไม่เกิดขึ้นตอนรัน debug code ดังนั้นเวลาทำ benchmarking ต้องทำตอนรัน release code เท่านั้น) ที่สำคัญคือควรระบุตัวแปรให้เป็นประเภทค่าคงที่ในที่ที่สมควร ไม่เช่นนั้นคอมไพล์เลอร์ก็อาจจะยุบยากสักหน่อย

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

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

โปรแกรมส่วนที่ซับซ้อนที่สุดและดูแลยากที่สุดที่ผมเคยเจอคือการคำนวนภาษี ผมทำงานให้ระบบที่รันในแคนาดา ดังนั้นมันก็จะอยู่ภายใต้กฎหมายแคนาดา เรื่องการคำนวนภาษีนี่ที่นี่เปลี่ยนแทบทุกปี มีกฎเกณฑ์ใหม่แทบทุกปี และการคำนวนก็ค่อนข้างซับซ้อน ถ้าคุณยุบทุกอย่างให้สั้นที่สุดและอาศัยแค่คอมเมนท์เพื่อที่จะบอกว่ากฎเกณฑ์นี้ทำอะไรคุณจะเจอปัญหาเมื่อปีต่อไปมีการแก้ไขกฎการคำนวน หรือมีภาษีประเภทใหม่เพิ่มขึ้นมา ในกรณีนี้การเขียนให้ชัดเจนนั้นเป็นเรื่องสำคัญมากเพราะคอมเม็นท์พึ่งพาไม่ได้เลย (มันเขียนกฎของเมื่อ 12 ปีที่แล้ว ไม่ใช่ของปีนี้ และไม่มีใครคิดจะแก้หรือไม่รู้ว่าจะแก้อะไร)
Translate
 
สำหรับผม คอมเมนต์ เอาไว้บังคำสั่ง เวลาที่จะหาข้อผิดพลาดของโค๊ดทีละส่วน หรือเวลาจะให้มัน debug output ค่าออกมา แต่โปรแกรมยังทำไม่เสร็จ จะให้ลบ คำสั่งทีเป็น output ออก คงไม่ดี เผื่อไว้ debug เวลาที่มีปัญหาอีกก็เอาคอมเมนต์บังไว้

ซึ่งพอไม่มีัปัญหาใดๆแล้วก็จะลบคอมเมนต์นั้นออกไปอะครับเพราะรู้สึกว่าโค๊ดมันไม่สวย 555555+

ส่วนถ้าเป็นการคำนวณลอจิกของพี่ ผมจะตั้งชื่อฟังชั่นให้มันสอดคล้องกันอะครับ มันจะจำได้เองเลย หรือแค่ไปวิเคราะห์โค๊ดนิดหน่อยก็เข้าใจได้ไม่ยาก
Translate
Add a comment...