เขียน code อย่างไร ไม่ให้โดนด่าพ่องง ตอนที่ 2 Naming Matters (Variable & Classes)
ชื่อของตัวแปร เป็นสิ่งที่ส่งผลกระทบเป็นอย่างมากในการเขียนโค้ดให้คนอื่นอ่านรู้เรื่อง
ลองนึกภาพดูว่า ถ้าเราตั้งชื่อตัวแปรเป็น p, t, i, j, k
เอ่ออออออ ใครจะรู้ความหมาย และใครจะอ่านรู้เรื่อง
เปรียบเสมือนเราอ่านหนังสือ
P was very angry with C, G kicked C in the K.
แล้วลองเขียนยาวๆ คนอ่านก็จะงงๆหน่อยว่า สรุป ใครทำอะไรและเรื่องราวเป็นอย่างไร
และไม่ใช่เฉพาะชื่อตัวแปรเท่านั้น ชื่อฟังก์ชัน ชื่อคลาส เราก็ต้องตั้งชื่อให้สอดคล้องกับหน้าที่และความหมายของสิ่งที่มันกำลังทำอยู่
บทความนี้ เราจะเน้นไปที่เรื่องเดียวคือ Naming Classes (การตั้งชื่อคลาส) เพราะเดี๋ยวมันจะ TL;DR จนเกินไป
มาดูตัวอย่างที่ดีและไม่ดีกันก่อนดีกว่า
ตัวอย่างที่ Dirty
Common, MyFunctions, Utility, ManagerInfo เป็นชื่อที่ดูเป็นกลางมากๆ ไม่สื่อถึงหน้าที่เลย ส่วนคำว่า ManagerInfo ถ้ามีชื่ออื่นอีกเช่น ManagerProduct ก็จะดูสับสนเกินไป ว่าแต่ละชื่อทำอะไรกันแน่นะ
ตัวอย่างที่ Clean
User, Account, QueryBuilder, ProductRepository
เรามาดูคำแนะนำกันหน่อย
Guidelines: สำหรับการตั้งชื่อ Classes
- Noun : ชื่อ Class ควรตั้งเป็นคำนาม เพราะว่าเราต้องสร้าง instance จาก Class นี้สำหรับสิ่งหนึ่งเท่านั้น
- Be specific : ถ้าเป็นไปได้ควรตั้งชื่อที่เฉพาะเจาะจง เมื่อคุณลองเขียนโค้ด แล้วพบว่า instance ที่สร้างจาก Class นี้สามารถเรียกใช้ Methods ที่หลากหลายจนเกินกว่าที่ชื่อสื่อถึง แปลว่าถึงเวลาที่ต้อง Refactor แล้ว
- SRP (Single Responsibility Principle) : แน่นอนว่า ชื่อ Class ต้องสื่อถึงการทำหน้าที่เพียงหนึ่งอย่างเท่านั้น ยกตัวอย่างเช่น ProductRespository มีหน้าที่เรียกข้อมูลจากฐานข้อมูลที่เป็นข้อมูลเกี่ยวกับ Product เท่านั้น แต่ถ้าเราเขียนโค้ดให้ส่งอีเมล์ไปด้วย ก็จะเกินหน้าที่ของชื่อที่สื่อ ดังนั้นยึดหลัก SRP ไว้ให้ดี
- Avoid generic suffixes : Class ที่มี Business Logic เกี่ยวกับ Product ควรใช้ชื่อว่า Product ไม่ควรตั้งเป็น ProductInfo หรือ ProductManager มันดูสับสนเวลานำไปใช้
บทความหน้ามาต่อกันด้วยเรื่องชื่อของ Methods, Warning Signs, Side Effect, Boolean และอื่นๆ โดยถ้าเนื้อหายาวไปจะแบ่งออกเป็นส่วนครับ