Clean Code คืออะไร?

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


Clean Code คืออะไร?

// "Any fool can write code that a computer can understand.
// Good programmers write code that humans can understand."
//                                          — Martin Fowler


3 เสาหลักของ Clean Code

อ่านง่าย คนอื่นหยิบไฟล์ขึ้นมาแล้วเข้าใจว่าโค้ดทำอะไรภายใน 30 วินาที

เปลี่ยนแปลงง่าย เพิ่ม feature ใหม่หรือแก้ bug โดยไม่ต้องกลัวว่าจะทำให้ส่วนอื่นพัง

ทดสอบง่าย แต่ละฟังก์ชันทำสิ่งเดียว รับ input ที่ชัดเจน ส่ง output ที่คาดเดาได้


ตัวอย่าง — การตั้งชื่อตัวแปรและฟังก์ชัน

// ✗ ไม่ดี — ชื่อย่อที่ไม่มีความหมาย
function calc(d, r) {
  let x = d * r / 100;
  return d - x;
}

let y = calc(500, 20);


// ✓ ดี — ชื่อที่บอก intent ได้ชัดเจน
function applyDiscount(price, discountPercent) {
  const discount = price * discountPercent / 100;
  return price - discount;
}

const finalPrice = applyDiscount(500, 20);


ตัวอย่าง — ฟังก์ชันทำสิ่งเดียว (Single Responsibility)

// ✗ ไม่ดี — ทำทุกอย่างในฟังก์ชันเดียว
function processUser(user) {
  if (!user.email) throw 'No email';
  db.insert(user);
  smtp.send(user.email, 'Welcome!');
  console.log('done');
}


// ✓ ดี — แยกหน้าที่ออกจากกัน
function validateUser(user) {
  if (!user.email) throw 'No email';
}

function saveUser(user) {
  return db.insert(user);
}

function sendWelcomeEmail(email) {
  smtp.send(email, 'Welcome!');
}


6 กฎทองของ Clean Code

1. ชื่อต้องบอก intent

ตัวแปร, ฟังก์ชัน, class ต้องอ่านแล้วรู้ทันทีว่าทำอะไร หลีกเลี่ยงชื่อย่อ เช่น d, tmp, x2

2. ฟังก์ชันทำสิ่งเดียว

ถ้า function มีชื่อว่า saveAndSendEmail() นั่นคือสัญญาณว่าต้องแยกออกเป็น 2 function

3. ห้าม Magic Numbers

เลขที่ปรากฏในโค้ดโดยไม่มีคำอธิบาย เช่น * 86400 ควรเป็น * SECONDS_PER_DAY

4. DRY — Don't Repeat Yourself

โค้ดที่เขียนซ้ำหลายที่ = หลายจุดที่ต้องแก้ถ้ามีบัก ย้ายไปไว้ใน function เดียว

5. Comment อธิบาย "ทำไม" ไม่ใช่ "ทำอะไร"

โค้ดที่ดีพอจะอธิบายตัวเองได้ comment ที่มีค่าคืออธิบาย business logic หรือ edge case ที่ซับซ้อน

6. Boy Scout Rule

แก้ไฟล์ไหนก็ทำให้โค้ดในนั้นดีกว่าเดิมเล็กน้อยทุกครั้ง


Dirty Code vs Clean Code

Dirty Code ใช้เวลา debug นาน / กลัวแตะโค้ดเก่า / onboarding ใช้เวลาสัปดาห์ / เพิ่ม feature ช้าลงเรื่อยๆ

Clean Code เจอ bug เร็ว แก้ได้ทันที / แก้ไขมั่นใจ ไม่กลัวพัง / เพื่อนใหม่เข้าใจภายในวัน / ship feature ได้ต่อเนื่อง