On this page
DRY, KISS, YAGNI & Code Smells
หลักการคิดที่ทำให้โค้ดดูแลง่าย และสัญญาณเตือน (code smell) ว่าโค้ดเริ่มมีปัญหา
มีหลักการสั้น ๆ ไม่กี่ข้อที่ช่วยให้ตัดสินใจได้ว่าโค้ดควรเป็นแบบไหน และมี "กลิ่น" บางอย่างที่บอกว่าโค้ดกำลังจะมีปัญหา — รู้จักไว้แล้วจะมองโค้ดออกว่าตรงไหนควรปรับ
DRY — Don't Repeat Yourself
อย่าเขียนตรรกะเดียวกันซ้ำหลายที่ เพราะเวลาแก้ต้องตามแก้ทุกจุด (และมักลืม) ถ้าเห็นโค้ดซ้ำ ให้ดึงเป็นฟังก์ชัน
# ❌ ซ้ำ — แก้สูตรต้องตามแก้ 2 ที่
total_a = price_a + price_a * 0.07
total_b = price_b + price_b * 0.07
# ✅ ดึงเป็นฟังก์ชันเดียว
def with_vat(price):
return price + price * 0.07
total_a = with_vat(price_a)
total_b = with_vat(price_b)KISS & YAGNI
| หลัก | ย่อมาจาก | ความหมาย |
|---|---|---|
| DRY | Don't Repeat Yourself | อย่าเขียนซ้ำ ดึงเป็นจุดเดียว |
| KISS | Keep It Simple, Stupid | ทำให้เรียบง่ายที่สุดเท่าที่ได้ |
| YAGNI | You Aren't Gonna Need It | อย่าทำเผื่ออนาคตที่ยังไม่มา |
มือใหม่ที่อยากโชว์มักทำโค้ดซับซ้อนเกินจำเป็น เผื่อเคสที่ไม่มีวันเกิด (ละเมิด KISS/YAGNI) — โค้ดที่เรียบง่ายและแก้ปัญหาตรงหน้าได้ ดีกว่าโค้ดยืดหยุ่นเกินจนไม่มีใครเข้าใจ
Code Smells — สัญญาณว่าโค้ดเริ่มเสีย
code smell คือลักษณะที่ "ส่อ" ว่าโค้ดอาจมีปัญหา ไม่ใช่ bug แต่เป็นสัญญาณว่าควรปรับ:
- ฟังก์ชันยาวมาก (เกินจอ) — ทำหลายเรื่อง ควรแตก
- พารามิเตอร์เยอะเกิน (4-5 ตัวขึ้น) — อาจรวมเป็น object
- โค้ดซ้ำหลายที่ — ละเมิด DRY
- ชื่อกำกวม (data, temp, info, manager)
- comment เยอะผิดปกติ — มักเพราะโค้ดอ่านไม่รู้เรื่อง
- nested ลึกหลายชั้น (if ใน if ใน for) — อ่านยาก
สรุปหัวข้อนี้
- DRY: อย่าเขียนตรรกะซ้ำ ดึงเป็นฟังก์ชันเดียว
- KISS: เรียบง่ายไว้ก่อน; YAGNI: อย่าทำเผื่ออนาคตที่ยังไม่มา
- code smell = สัญญาณเตือน (ฟังก์ชันยาว, พารามิเตอร์เยอะ, ซ้ำ, ชื่อกำกวม, nested ลึก)
- over-engineering แย่พอ ๆ กับทำน้อยเกิน
1) หาโค้ดซ้ำในโปรเจกต์เก่าแล้วดึงเป็นฟังก์ชัน (DRY) 2) หา code smell ในโค้ดที่ให้มา 3 จุด 3) ยกตัวอย่างโค้ดที่ over-engineer แล้วทำให้ง่ายลง 4) อธิบาย KISS กับ YAGNI ด้วยคำตัวเอง