Devfavor

Back

ตั้งชื่อตัวแปรและฟังก์ชันให้สื่อความหมาย — เขียนโค้ดที่อ่านแล้วเข้าใจได้ในตัวBlur image

มีโค้ดที่เขียนเมื่อหกเดือนก่อน พอกลับมาอ่านใหม่กลับต้องนั่งไล่ทีละบรรทัดว่า d คืออะไร tmp2 เก็บค่าอะไร และฟังก์ชันชื่อ process() ทำอะไรกันแน่

โค้ดนั้นรันได้ถูกต้อง แต่ทำให้เสียเวลาทุกครั้งที่ต้องแก้ไข

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


🤔 ทำไมชื่อถึงสำคัญขนาดนี้#

นักพัฒนาส่วนใหญ่ใช้เวลาอ่านโค้ดมากกว่าเขียนโค้ดหลายเท่า — ทุกนาทีที่ผู้อ่านต้องหยุดเดาว่าตัวแปรนี้หมายถึงอะไร คือเวลาที่หายไปเปล่า ๆ

ชื่อที่ดีทำหน้าที่เหมือน documentation ในตัวเอง ผู้อ่านไม่ต้องกระโดดไปดู comment หรือไปไล่หาว่าค่านี้ถูกสร้างมาจากไหน


📦 หลักการตั้งชื่อตัวแปร#

ใช้ชื่อที่บอกเจตนา ไม่ใช่แค่ชนิดข้อมูล

# ❌ ไม่ชัดเจน
d = 7
lst = ["Alice", "Bob"]

# ✅ ชัดเจน
days_until_deadline = 7
active_user_names = ["Alice", "Bob"]
python

เพียงเปลี่ยนชื่อ ผู้อ่านก็เข้าใจได้ทันทีว่าค่านี้คืออะไรและนำไปใช้อย่างไร

หลีกเลี่ยงตัวย่อที่คนอื่นเดาไม่ออก

ตัวย่อที่ทีมทุกคนรู้จัก เช่น id, url, html ใช้ได้ แต่ตัวย่อที่คิดขึ้นมาเอง เช่น usr, cnt, mgr มักสร้างความสับสนโดยไม่จำเป็น การพิมพ์ user, count, manager เพิ่มขึ้นนิดหน่อยแลกกับความชัดเจนที่ได้คืนมาคุ้มกว่ามาก

ตัวแปร boolean ควรอ่านเหมือนคำถาม

// ❌
let login = true;
let visible = false;

// ✅
let isLoggedIn = true;
let isVisible = false;
javascript

เมื่ออ่านในเงื่อนไข if (isLoggedIn) จะอ่านออกว่าหมายความว่าอะไร แทนที่จะเป็น if (login) ที่อาจตีความได้หลายแบบ


⚙️ หลักการตั้งชื่อฟังก์ชัน#

ชื่อฟังก์ชันควรบอกว่าทำอะไร ไม่ใช่แค่บอกว่ามีการทำงาน

// ❌ กว้างเกินไป
function process(data) { ... }
function handle(input) { ... }

// ✅ ชัดเจน
function calculateMonthlyRevenue(orders) { ... }
function validateEmailFormat(email) { ... }
typescript

ชื่อ process บอกได้แค่ว่า “มีการประมวลผลบางอย่าง” แต่ไม่ได้บอกว่าประมวลผลอะไร ใครเรียกใช้ต้องเข้าไปอ่าน body ของฟังก์ชันก่อนถึงจะรู้

ฟังก์ชันที่คืนค่า boolean ควรตั้งชื่อเหมือนคำถาม

# ❌
def user_active(user): ...
def email(text): ...

# ✅
def is_user_active(user): ...
def is_valid_email(text): ...
python

ระวังฟังก์ชันที่ชื่อดีแต่ทำหลายอย่าง

ถ้าชื่อฟังก์ชันต้องใส่คำว่า “and” เพื่ออธิบายว่าทำอะไร นั่นเป็นสัญญาณว่าฟังก์ชันนั้นทำมากเกินไป เช่น saveUserAndSendEmail() ควรแยกเป็นสองฟังก์ชันที่ทำหน้าที่ชัดเจนคนละอย่าง


🧭 จุดที่มักสับสนกัน — ชื่อดีแค่ไหนถึงพอ#

ไม่มีคำตอบตายตัว แต่มีคำถามง่าย ๆ ที่ช่วยตัดสินได้: “ถ้าคนอื่นอ่านบรรทัดนี้เป็นครั้งแรก ต้องหยุดคิดไหม?”

ชื่อที่ยาวเกินไปก็อ่านยาก เช่น numberOfActiveUserAccountsCreatedThisMonth อาจย่นเหลือแค่ active_users_this_month ได้โดยไม่สูญเสียความหมาย

หัวใจคือความสมดุลระหว่างความกระชับและความชัดเจน — พอดีกับบริบทที่ใช้


🤝 ความสม่ำเสมอในทีมสำคัญพอ ๆ กับการตั้งชื่อที่ดี#

ถ้าทีมหนึ่งใช้ get_user() อีกทีมใช้ fetchUser() และอีกคนใช้ loadUser() สำหรับสิ่งเดียวกัน ผู้อ่านต้องเดาทุกครั้งว่าทั้งสามแบบต่างกันอย่างไร

การตกลงกันในทีมว่าจะใช้คำไหนสำหรับแต่ละ pattern แล้วยึดให้สม่ำเสมอ ช่วยลดภาระทางความคิดได้มากกว่าการตั้งชื่อสวยแต่ไม่สอดคล้องกัน


📝 สรุป#

การตั้งชื่อที่ดีคือการลงทุนเล็ก ๆ ที่คืนผลทุกครั้งที่ทีมอ่านโค้ดนั้น หลักการหลักมีไม่กี่ข้อ:

  • ชื่อตัวแปรบอกเจตนา ไม่ใช่แค่ชนิด
  • ชื่อฟังก์ชันบอกว่าทำอะไร ไม่ใช่แค่บอกว่ามีการทำงาน
  • boolean ทั้งตัวแปรและฟังก์ชันอ่านเหมือนคำถาม
  • ความสม่ำเสมอในทีมสำคัญไม่แพ้การตั้งชื่อที่สวย

ถ้าอยากเริ่มต้นจากจุดเล็ก ๆ ลองเปิดโค้ดที่เขียนล่าสุดแล้วถามว่า “ถ้าคนใหม่เห็นบรรทัดนี้เป็นครั้งแรก ต้องอ่านนานแค่ไหนถึงจะเข้าใจ?” คำตอบนั้นบอกได้ว่ามีจุดไหนที่ควรปรับปรุงก่อน

😎 ☕

Code, coffee, and calm — the holy trinity of a good day. ☕

ตั้งชื่อตัวแปรและฟังก์ชันให้สื่อความหมาย — เขียนโค้ดที่อ่านแล้วเข้าใจได้ในตัว
Author Coffee Stack
Published at 5 มิถุนายน 2026