blog.dopana

Back

“Code sạch không phải viết cho máy tính — nó viết cho con người.” — Robert C. Martin

1. Đặt Tên — Khó Nhất Trong Lập Trình#

Biến — Cho Biết Nó Chứa Gì#

// ❌ Tệ
const d = new Date();
const arr = [1, 2, 3];
const fn = () => {};
const data = fetchData();

// ✅ Tốt
const currentDate = new Date();
const userIds = [1, 2, 3];
const handleSubmit = () => {};
const userProfile = await fetchUserProfile();
typescript

Boolean — Câu Hỏi Có/Không#

// ❌ Tệ
const flag = true;
const status = false;
const login = true;

// ✅ Tốt
const isActive = true;
const hasPermission = false;
const isLoggedIn = true;
typescript

Hàm — Mô Tả Hành Động#

// ❌ Tệ
function data(id: number) { ... }
function handle(id: number) { ... }

// ✅ Tốt
function getUserById(id: number) { ... }
function deleteUser(id: number) { ... }
function sendEmailNotification(email: string) { ... }
typescript

2. Function Nhỏ — Một Hàm Một Việc#

3. DRY — Don’t Repeat Yourself#

4. Comments — Code Tự Giải Thích#

5. Error Handling — Đừng Nuốt Lỗi#

6. Formatting — Nhất Quán#

7. KISS — Keep It Simple, Stupid#

// ❌ Tệ — over-engineering
const result = await new Promise((resolve) => {
  process.nextTick(() => {
    resolve(expensiveCalculation());
  });
});

// ✅ Tốt — đơn giản
const result = expensiveCalculation();
typescript

8. YAGNI — You Ain’t Gonna Need It#

9. Law of Demeter — Đừng Gọi Quá Sâu#

// ❌ Tệ — train wreck
const city = user.getAddress().getCity().getName();

// ✅ Tốt — hỏi trực tiếp
const city = user.getCityName();

// Hoặc dùng optional chaining
const city = user?.address?.city?.name;
typescript

10. Testability — Code Dễ Test#

Kết Luận#

Clean code không phải “đẹp” — nó là dễ đọc, dễ sửa, dễ bảo trì. Nguyên tắc vàng: viết code như người tiếp theo đọc nó là một kẻ tâm thần biết địa chỉ nhà bạn.

  • Tên rõ ràng — biến, hàm, class
  • Function nhỏ — mỗi hàm một việc
  • DRY — đừng lặp lại
  • KISS — đơn giản
  • YAGNI — chỉ viết khi cần
  • Testable — inject dependency

Tài liệu tham khảo#