Phân tích về Mã Sạch

Опубликовано: 30 Июль 2026
на канале: Dev Block
30
1

Clean Code" của Robert C. Martin (Uncle Bob) không chỉ là một cuốn sách về lập trình, mà là một lời kêu gọi hành động để thay đổi cách chúng ta viết code. Nếu bạn đã từng cảm thấy mệt mỏi với việc "dọn dẹp" đống code rối rắm của người khác (hoặc của chính mình), cuốn sách này chính là kim chỉ nam giúp bạn viết ra mã nguồn trong trẻo, dễ hiểu như văn xuôi mà đồng nghiệp phải cảm ơn.

Mục tiêu tối thượng của "Clean Code" là nâng cao tính chuyên nghiệp trong lập trình. Code sạch là code được viết với sự tỉ mỉ, giúp giảm thiểu chi phí bảo trì và mở rộng hệ thống trong tương lai.

1. Tên gọi ý nghĩa (Meaningful Names)
Sử dụng tên có ý định rõ ràng: Tên biến, hàm, lớp phải truyền tải được mục đích, lý do tồn tại, và cách sử dụng. Tránh các tên mơ hồ như data, info, hay các từ viết tắt không chuẩn.

Tránh thông tin sai lệch: Không dùng tên hàm ý sai như dùng list cho một Set.

Phân biệt rõ ràng: Đặt tên khác biệt cho các khái niệm khác nhau (ví dụ: Customer khác Client).

2. Hàm và Chức năng (Functions)
Hàm nên nhỏ và làm một việc duy nhất: Đây là một trong những quy tắc quan trọng nhất. Một hàm chỉ nên thực hiện một mức độ trừu tượng (level of abstraction).

Số lượng đối số (Arguments): Lý tưởng nhất là không đối số (zero arguments). Nếu cần, nên giữ ở mức tối đa là hai (dyad). Tránh sử dụng cờ hiệu boolean (flag argument) vì nó cho thấy hàm đang làm nhiều hơn một việc.

Không gây ra tác dụng phụ (Side Effects): Hàm không nên thay đổi trạng thái của hệ thống theo cách không mong đợi.

Tránh trả về null: Điều này buộc người gọi phải kiểm tra null, làm code trở nên rối rắm. Tốt nhất là ném ngoại lệ (throw an exception) hoặc trả về các đối tượng rỗng (Special Case Object).

3. Cấu trúc Lớp (Classes)
Nguyên tắc Trách nhiệm Đơn lẻ (Single Responsibility Principle - SRP): Một lớp chỉ nên có một lý do để thay đổi. Điều này làm cho các lớp nhỏ, tập trung và dễ kiểm thử hơn.

Tính liên kết (Cohesion): Các biến thể hiện (instance variables) phải được sử dụng bởi hầu hết các phương thức trong lớp. Nếu một nhóm biến chỉ được dùng bởi một số ít phương thức, có lẽ chúng nên được tách ra thành một lớp riêng.

Tính đóng gói (Encapsulation): Giữ các biến và hàm tiện ích ở chế độ private để kiểm soát quyền truy cập và thay đổi.

4. Xử lý Lỗi (Error Handling)
Sử dụng Ngoại lệ (Exceptions) thay vì mã lỗi (Error Codes): Mã lỗi làm code bị phân nhánh và khó đọc. Ngoại lệ cho phép bạn tách logic xử lý lỗi khỏi logic nghiệp vụ.

Sử dụng các câu lệnh Try-Catch-Finally hiệu quả: Khối try nên cô đọng logic có thể gây lỗi. Đừng để logic nghiệp vụ chính bị nhấn chìm trong khối try.

5. Khác biệt giữa Code Sạch và Code Bẩn
Code sạch là code đã được chăm sóc. Code bẩn (Bad Code) là nguyên nhân gây ra sự sụp đổ của dự án vì nó làm tăng chi phí phát triển theo cấp số nhân, khiến việc thay đổi trở nên nguy hiểm và tốn kém.