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 ได้ต่อเนื่อง