เขียน code อย่างไร ไม่ให้โดนด่าพ่องง ตอนที่ 2 Naming Matters (Variable & Classes)

Joaquin Fleck
odds.team
Published in
1 min readAug 20, 2018

ชื่อของตัวแปร เป็นสิ่งที่ส่งผลกระทบเป็นอย่างมากในการเขียนโค้ดให้คนอื่นอ่านรู้เรื่อง

ลองนึกภาพดูว่า ถ้าเราตั้งชื่อตัวแปรเป็น 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

  1. Noun : ชื่อ Class ควรตั้งเป็นคำนาม เพราะว่าเราต้องสร้าง instance จาก Class นี้สำหรับสิ่งหนึ่งเท่านั้น
  2. Be specific : ถ้าเป็นไปได้ควรตั้งชื่อที่เฉพาะเจาะจง เมื่อคุณลองเขียนโค้ด แล้วพบว่า instance ที่สร้างจาก Class นี้สามารถเรียกใช้ Methods ที่หลากหลายจนเกินกว่าที่ชื่อสื่อถึง แปลว่าถึงเวลาที่ต้อง Refactor แล้ว
  3. SRP (Single Responsibility Principle) : แน่นอนว่า ชื่อ Class ต้องสื่อถึงการทำหน้าที่เพียงหนึ่งอย่างเท่านั้น ยกตัวอย่างเช่น ProductRespository มีหน้าที่เรียกข้อมูลจากฐานข้อมูลที่เป็นข้อมูลเกี่ยวกับ Product เท่านั้น แต่ถ้าเราเขียนโค้ดให้ส่งอีเมล์ไปด้วย ก็จะเกินหน้าที่ของชื่อที่สื่อ ดังนั้นยึดหลัก SRP ไว้ให้ดี
  4. Avoid generic suffixes : Class ที่มี Business Logic เกี่ยวกับ Product ควรใช้ชื่อว่า Product ไม่ควรตั้งเป็น ProductInfo หรือ ProductManager มันดูสับสนเวลานำไปใช้

บทความหน้ามาต่อกันด้วยเรื่องชื่อของ Methods, Warning Signs, Side Effect, Boolean และอื่นๆ โดยถ้าเนื้อหายาวไปจะแบ่งออกเป็นส่วนครับ

ที่มา : Clean Code: Writing Code for Humans

--

--