เรื่องที่ 6 ที่นักพัฒนาควรรู้ และ เข้าใจก็คือ Comment Only What the Code Cannot Say
หรือทำการ comment ใน code เฉพาะส่วนของ code ที่มันอธิบายตัวเองไม่ได้เท่านั้น
เรื่องของการ comment มันมักจะสวนทางกันระหว่าง ทฤษฎี และ การปฏิบัติ
และบ่อยครั้งพบว่า มักจะมี drama ของเรื่องการ comment ให้เห้นอยู่เรื่อยๆ
เช่น จะเขียน comment หรือไม่เขียนดีนะ ?
ในฝั่งทฤษฎี
นั้นจะบอกว่า การเขียน comment เพื่ออธิบาย code
นั้นเป็นสิ่งที่ดี และ คุ้มค่าต่อการลงทุนเสมอ
ลองคิดดูว่า คนมาอ่าน code จะเข้าใจรายละเอียดการทำงานต่างๆ ได้อย่างไร
ถ้าไม่มี comment
แต่มันมีอะไรที่ช่วยอธิบาย code อีกไหมล่ะ ?
ในฝั่งการปฏิบัติ
เมื่อดูสิ่งที่นักพัฒนาสร้าง comment ขึ้นมาใน code
บ่อยครั้งพบว่า ส่วนของ comment มันกลับทำลาย code หรือ ขัดแย้งกับ code
เพราะว่า ความสามารถในการเขียน comment ของนักพัฒนาดีกันมากๆ !!!
ดังนั้นนักพัฒนาต้อง
ความสามารถของนักพัฒนาในการเขียน comment นั้นต้องดีเลยนะ
แต่สิ่งที่ดีกว่า หรือ สำคัญกว่า ก็คือ
ความสามารถในการเขียน code ให้มันอธิบายตัวเองโดยที่ไม่ต้องเขียน comment
มันน่าจะเป็นแนวทางปฏิบัติที่นักพัฒนาควรจะทำก่อนนะ
แล้ว Comment มันคืออะไร ?
ปกติ compiler และ interpreter ของแต่ละภาษาโปรแกรม
จะทำการตรวจสอบ code และแปลง code ไปอยู่ในรูปแบบที่ต้องการ
จากนั้นเราก็ทำการตรวจสอบการทำงานของ code
จากนั้นเราก็ทำการตรวจสอบ code ด้วย Static analysis
จากนั้นเราก็ทำการทดสอบ
จากนั้นเราก็ทำการติดตั้งไปยัง production server
แล้ว comment มันคืออะไรล่ะ ไม่ได้เกี่ยวอะไรกับการเขียน code เลย ?
จาก The Elements of Programming Style, by Brian W. Kernighan and P. J. Plauger
กล่าวไว้ว่า
“a comment is of zero (or negative) value if it is wrong.”
comment คือ สิ่งที่ไร้ค่ามากๆ ถ้าเขียน comment แบบผิดๆ
และบ่อยครั้ง เรามักพบว่า comment มันจะกลายเป็นสิ่งที่เหมือนหอกข้างแคร่
และมันจะอยู่ใน code ของระบบคุณแบบนานเท่านาน
และจะพบว่า comment กับ code มันจะไปคนละทาง
แปลกนะ ทำไมความเป็นจริงมันเป็นแบบนี้ !!
Comment นั้นมันดีนะ
ใช้เพื่อให้นักพัฒนาอธิบายแนวคิดของตัวเองว่า
- code ทำงานอย่างไรบ้าง ?
- code สามารถถูกเรียกใช้งานอย่างไร ?
- code มี error อะไร ?
- code มีข้อจำกัดอะไรบ้าง ?
แล้ว comment มันมีประโยชน์อะไรล่ะ ?
บางครั้ง comment มันรบกวนเรามากๆ
เช่น เขียน comment ตามการทำงานของ code หรือเหมือนการอ่าน code เลย
ยิ่งในภาษาโปรแกรมใหม่ๆ ยิ่งสามารถเขียนให้อ่านง่ายๆ ได้เลย
Comment มันคือส่วนที่ compiler/interpreter ไม่ได้สนใจ
หรือนำไปใช้ในส่วนของ runtime เลย
ดังนั้น comment คงไม่ได้สร้างมาเพื่ออธิบายให้เครื่องเข้าใจแน่นอน
บางคนบอกว่า เขียน comment เพื่ออธิบายว่า code ในปัจจุบันนั้น
มันมี version หรือการเปลี่ยนแปลงมาเท่าไร และ อย่างไร
ซึ่งตรงนี้ เราน่าจะใช้ comment ผิดที่ผิดทาง
เนื่องจาก เราสามารถนำ Version Control System มาใช้ได้นะ ย่าจะถูกที่เก่าเยอะ ว่าไหม ?
ถ้านักพัฒนาคิดว่า comment มันรบกวนการอ่านมากๆ
มักจะกำหนดสีของ comment ให้มันจางๆ หรือมองไม่เห็นไปเลย แต่ไม่ค่อยลบทิ้งหรอกนะ
ทำให้นักพัฒนาเลิกสนใจ comment ไปเลย
ดังนั้นแต่ละ comment นั้น
มันควรจะเพิ่มคุณค่าให้แก่ผู้ที่ทำการอ่าน code
ถ้าเราเห็นว่า comment เหล่านั้นมันไม่ได้สร้างประโยชน์ หรือ คุณค่าใดๆ ต่อผู้อ่านเลย
แนะนำให้ลบ หรือ เขียนใหม่ซะ
แล้วคุณค่าของ comment มันคืออะไรล่ะ ?
Comment นั้นควรจะเขียนเมื่อ code ในส่วนนั้นมันไม่สามารถอธิบายตัวมันเองได้
Comment นั้นใช้สำหรับอธิบายส่วนการทำงานของ code
ทั้งอธิบายรูปแบบ code ที่เปลี่ยนไป
ทั้งอธิบายสิ่งที่ code ทำงาน
แต่มันคือการสร้างงานซ้ำซ้อนขึ้นมาหรือเปล่านะ ?
ถ้าลองคิดอีกมุมหนึ่งก่อนที่จะ comment
- ชื่อของ class มันไหม ?
- ชื่อของ method/function มันดีไหม ?
- ชื่อของตัวแปรต่างๆ มันดีไหม ?
- ถ้าชื่อต่างๆ ใน code มันไม่ดี ให้ทำการแก้ไข หรือ เปลี่ยนชื่อก่อนดีไหม ?
ถ้าการทำงานใน method/function มันจำเป็นต้องเขียน comment
คุณลองคิดหน่อยสิว่า method/function นั้นมันใหญ่หรือซับซ้อนไปไหม ?
ถ้าตอบว่า ใช่มันใหญ่และซับซ้อนไป
ก็ให้ทำการ extract method ออกไปดีไหม แล้วตั้งชื่อให้มันสื่อต่อการทำงานจริงๆ
ทำให้คุณไม่จำเป็นต้องเขียน comment แล้วใช่ไหม ?
โดยสรุปแล้ว
ผมแนะนำให้คุณแก้ไข หรือ เขียน code ให้มันอธิบายตัวเองให้มากที่สุดเท่าที่จะทำได้
ก่อนที่จะทำการเขียน comment ในส่วนที่ code มันอธิบายไม่ได้
ซึ่งจะทำให้ comment มันมีคุณค่ามากๆ
แต่มันก็ไม่ง่ายเลยนะ !!
แต่ก็ใช่ว่าจะทำไม่ได้
วันนี้คุณเขียน code และ comment อย่างไรกันบ้างนะ ?
มีคนบอกไว้ว่า code ของเรามันจะไม่สมบูรณ์ถ้าปราศจาก
การ comment ที่ดี และ มีคุณค่านะครับ