การ comment คือ การทำให้ประโยคหรือตัวอักษรที่เราเขียนในโปรแกรมไม่ถูกประมวลผล โดยอาจมีไว้เพื่อให้บอท
(bot) หรือโปรแกรมเมอร์คนอื่นอ่าน เป็นรูปแบบการการสื่อสารแบบหนึ่งที่โปรแกรมเมอร์สามารถสื่อสารได้
เพื่อให้การทำงานร่วมกันมีประสิทธิภาพมากขึ้น
ไม่จำเป็นต้อง comment ก็ได้ ถ้าวางรูปแบบและตั้งชื่อตัวแปรของ code ดีพอ
คำพูดลักษณะนี้พบได้บ่อยในการแลกเปลี่ยนกันในหัวข้อ เราควร comment ใน code หรือไม่?
ในความเห็นของผมคือ การ comment ยังมีความจำเป็นในบางโอกาสและมีประโยชน์มากกว่าโทษ
ในบางโอกาสที่ถึงแม้จะไม่มีความจำเป็นแต่ก็จะเป็นประโยชน์กับเพื่อนร่วมงานมากกว่าการที่เราไม่ comment
เพราะคำอธิบายที่เป็นคำพูด ส่วนมากแล้วจะเข้าใจได้ง่ายกว่า
ในการทำงานร่วมกันกับคนหลายคน ถึงแม้ว่าผู้ที่เขียน code นั้น
จะเชื่อว่าสิ่งที่เขียนลงไป เป็นสิ่งที่ง่ายสำหรับผู้เขียน แต่ทุกคนมีที่มาและพื้นฐานของความรู้ที่แตกต่างกัน
หากเราหลีกเลี่ยงการ comment ในส่วนที่สำคัญ นอกจากจะไม่เกิดประโยชน์ ยังอาจทำให้การทำงานร่วมกัน
สามารถทำได้ช้าลงเนื่องจากเพื่อนร่วมงานอาจจะไม่สามารถทำความเข้าใจกับ code ได้
โดยปกติของการ comment ไม่ได้มีการระบุหลักการหรือรูปแบบที่ตายตัวเอาไว้ ทำให้ผู้ที่เริ่มต้นเขียนโปรแกรม
มักจะไม่กล้าเริ่มเขียน comment เพราะกลัวว่าจะทำให้ code ของตนเองดูไม่ดี แต่หลักคิดของผมคือ
หากโปรแกรมเมอร์ที่มาเขียนโปรแกรมต่อจากเรา จำเป็นต้องได้รับคำอธิบายก่อนการเริ่มทำงาน
ไม่ว่าจะเรื่องอะไร คำอธิบายเรื่องนั้นก็สมควรถูกใส่เอาไว้ใน comment ของ code เช่นตัวอย่างต่อไปนี้
อธิบายความสำคัญหรือหน้าที่ของ class, module หรือ namespace
ในการเขียนโปรแกรมที่มีการแบ่งส่วนการทำงานออกเป็น class, module หรือ namespace
หลายๆครั้งจะตั้งชื่อด้วยคำที่มีความหมายทั่วไป เพื่อให้สามารถคาดเดาการทำงานได้จากชื่อ
แต่บางครั้งชื่อที่ใช้ก็อาจจะมีความหมายที่กว้าง และสามารถใช้ได้กับหลายอย่าง
ยกตัวอย่าง comment จาก source code ของ Redis
ในส่วน Connection
ที่หากเปิดไฟล์ขึ้นมาอ่านครั้งแรก
อาจเข้าใจว่า Connection
ในที่นี้หมายถึงการตั้งค่า network connection เช่น การระบุขนาด buffer ,
การระบุชื่อ socket ที่ใช้ ผู้เขียนจึงได้ comment เอาไว้ว่าไฟล์ connection.c
นี้เป็นเพียง abstraction
ให้เรียกใช้เท่านั้น ส่วนของการตั้งค่าต่างๆของ network อยู่ใน networking.c
ที่มา: redis/src/connection.c#L33
อธิบายการทำงานของ code
เราสามารถตีความจุดประสงค์ของผู้เขียนโปรแกรมจากโปรแกรมที่เขียนได้
แต่กระบวนการนั้นต้องใช้ระยะเวลาและความเชี่ยวชาญที่บางคนในทีมไม่มี การเขียนอธิบายการทำงานคร่าวๆเอาไว้
นอกจากจะช่วยประหยัดเวลาของโปรแกรมเมอร์ที่อาจถูกมอบหมายให้ทำงานต่อจากเรา
ยังช่วยลดปัญหาที่อาจเกิดจากการตีความผิดอีกด้วย
ลองอ่านตัวอย่าง code ด้านล่างดูโดยเริ่มจาก comment จะเห็นประโยชน์ชัดเจนว่าการได้อ่าน comment ที่อธิบายการทำงานก่อนทำให้สามารถเข้าใจ code ได้เร็วขึ้น และยังป้องกันความผิดพลาดจากการตีความผิด
ที่มา: redis-py/redis/retry.py#L34
ในกรณีที่เป็น lib ให้มีการเรียกใช้จากภายนอกได้ การยกตัวอย่างใน comment ก็เป็นทางเลือกที่ดี
ที่มา: horovod/data/data_loader_base.py#L49
อธิบายความหมายของตัวแปรแต่ล่ะตัว
ชื่อตัวแปรก็อยู่ในแนวคิดที่ใกล้เคียงกับการอธิบายชื่อ module, class โดยมีประโยชน์มากสำหรับผู้เริ่มต้น
หรือเพื่อนร่วมงานที่เพิ่งเริ่มต้นทำงานร่วมกัน ให้สามารถรู้ถึงความสำคัญของตัวแปรแต่ล่ะตัวได้
ว่ามีผลกระทบอะไรบ้างกับโปรแกรม
ที่มา: yoshoku/rumale/lib/rumale/neural_network/mlp_classifier.rb#L49
อธิบายที่มาของแนวคิดหรือทฤษฎีบทที่ใช้ในการทำงาน
การเขียนโปรแกรม โดยเฉพาะโปรแกรมที่เขียนโดยอ้างอิงมาจากทฤษฎีต่างๆ การ comment
ระบุทฤษฎีที่เกี่ยวข้องเอาไว้ จะช่วยให้โปรแกรมเมอร์สามารถสืบค้นย้อนกลับไปได้
หากต้องการแก้ไขปัญหาที่อาจจะไม่ได้มาจาก error ของโปรแกรม แต่มาจากความผิดพลาดในการนำทฤษฎีมา implement
ที่มา: yoshoku/rumale/lib/rumale/neural_network/mlp_classifier.rb#L9
หรือถ้าแค่จะบอกว่า copy มาจาก web ก็ไม่จำเป็นต้องอธิบายเยอะ แค่ใส่ URL ไว้ก็พอ
ที่มา: ankane/ahoy/vendor/assets/javascripts/ahoy.js#L178