/ 365วันแห่งโปรแกรม

[365 วันแห่งโปรแกรม #day4] Naming

วันที่สี่ของ ‪#‎365วันแห่งโปรแกรม‬ วันนี้ยังอยู่ในเรื่องของธรรมเนียมทางการเขียนโปรแกรมเช่นเคย เรื่องในวันนี้เป็นส่วนที่โปรแกรมเมอร์ใช้เวลาอยู่กับมันมากที่สุด นั่นก็คือ การตั้งชื่อ


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

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

เอาล่ะครับ ผมว่านับตั้งแต่นี้เป็นต้นไป เรามาดูกันดีกว่าว่าการตั้งชื่อควรเป็นยังไง

  • ไม่ใช้ notation ต่างๆ ที่มักใช้ในการบอกคุณสมบัติของตัวแปร เช่น Hungarian notation เว้นแต่ในกรณีภาษาที่ใช้เป็น weakly typed เราอาจจะใช้เพื่อบอกว่าเป็นตัวแปรประเภทไหน

  • ไม่ใส่ prefix อื่นๆ เช่น m for member, s for static, _ for private

  • ตั้งชื่อคลาสด้วยคำนามเสมอ เช่น User, Vehicle, Calculator

  • ตั้งชื่อตัวแปรด้วยคำนามเสมอ เว้นแต่ในภาษาที่เป็น functional ซึ่งเราสามารถกำหนดค่าของตัวแปรเป็นฟังก์ชันได้

  • ตั้งชื่อ function/method ด้วย verb เว้นบางกรณีที่นิยมเช่น size()

  • ใช้ Pascal หรือ Camel case ตามธรรมเนียมของภาษานั้นๆ

  • ไม่ตั้งชื่อยาวเกิน 64 ตัวอักษร

  • ใช้ตัวย่อได้ ถ้าตัวย่อนั้นเป็นสากลจริงๆ

จริงๆ แล้วการตั้งชื่อแบบนี้ก็ไม่ได้เหมาะกับทุกสถานการณ์ เช่นในการ iterate และ count หรือ temporary variable นั้นอนุโลมให้ใช้ ตัวอักษร i-n หรือในฟังก์ชั่นทางคณิตศาสตร์สามารถใช้ a, b, c, และ x, y ได้

ไม่ว่าอย่างไรก็ตามเราควรยึดธรรมเนียมของแพลตฟอร์มนั้นๆ เป็นหลักก่อนเสมอ เพราะจะได้คุยกับคนอื่นเขารู้เรื่อง >< เช่น ใน มีหลายๆ สำนักที่เขียน C# ยังบอกให้ใช้ _ for private อยู่ ส่วน Google เองยังบอกว่าบน Android นั้น ให้ใช้ m for member เช่นกัน

ปิดท้ายวันนี้ ผมยังขอเชิญชวนทุกท่านให้เข้าร่วม ‪#‎โครงการ365วันแห่ง‬... โครงการที่เกิดขึ้นมาเพื่อแบ่งปันสิ่งต่างๆ ที่คุณรู้ ผ่าน social media ไม่น้อยกว่า 365 วัน โพสต์กันเยอะๆ นะครับ ผมรออยู่

‪#‎day4‬ #365วันแห่งโปรแกรม #โครงการ365วันแห่ง...