Clean Code JavaScript: Hướng Dẫn Viết Code Sạch Cho JS
Clean Code JavaScript là tài liệu tham khảo miễn phí, chuyển thể nguyên tắc từ cuốn sách Clean Code của Robert C. Martin thành ví dụ riêng cho JavaScript, mỗi nguyên tắc kèm một đoạn code "bad" và một đoạn "good" để so sánh. Đây là tài liệu hỗ trợ thảo luận khi review code, không phải công cụ tự sửa code. Dùng nó khi cần ngôn ngữ chung về đặt tên, kích thước hàm, và side effect; bỏ qua nếu bạn đã có linter làm việc đó.
Tìm Hiểu Clean Code JavaScript
Clean Code JavaScript là một repo GitHub do Ryan McDermott duy trì, tập hợp các nguyên tắc kỹ thuật phần mềm từ cuốn sách Clean Code của Robert C. Martin rồi viết lại từng nguyên tắc bằng ví dụ code JavaScript. README nói rõ đây không phải một style guide, và bao gồm mười hai chương, từ Variables và Functions đến SOLID, Testing, Concurrency, Error Handling, và một chương Translation dẫn tới các bản dịch ngôn ngữ khác.
Các Nguyên Tắc Và Chủ Đề Cốt Lõi
- ✓Chương Variables: đặt tên biến sao cho có nghĩa và dễ đọc, dùng một từ vựng thống nhất cho mỗi khái niệm, thay số ma thuật bằng hằng số có thể tìm kiếm, và dùng default parameter của ES2015 thay cho fallback `||`.
- ✓Chương Functions: giới hạn số lượng tham số còn hai hoặc ít hơn bằng cách destructure một object option, viết hàm chỉ làm một việc, giữ mỗi hàm ở một cấp độ trừu tượng, và bỏ tham số boolean flag để tách thành hai hàm riêng.
- ✓Hai phần "Avoid Side Effects" riêng biệt: một về state toàn cục dùng chung, một về việc thay đổi array/object được truyền vào làm tham số, minh hoạ bằng chính ví dụ giỏ hàng của tài liệu và một gợi ý dùng thư viện Immutable.js.
- ✓Một chương Classes và một chương SOLID riêng, được gắn trực tiếp trong topic GitHub của repo cùng với "composition" và "inheritance."
- ✓Objects and Data Structures, Testing, Concurrency, Error Handling, Formatting, và Comments là các chương còn lại, dù bộ dữ kiện này không mô tả chi tiết nội dung từng chương.
- ✓Một chương Translation khép lại, dẫn tới các bản dịch của cộng đồng sang ngôn ngữ khác.
Áp Dụng Các Nguyên Tắc Này
- •Đưa cặp ví dụ "Bad"/"Good" của một nguyên tắc ra khi review PR thay vì phải giải thích lại từ đầu cùng một góp ý về đặt tên hay số lượng tham số.
- •Tái cấu trúc một hàm quá cồng kềnh bằng quy tắc giới hạn hai-ba tham số và "một cấp độ trừu tượng" của chương Functions như một điểm dừng cụ thể.
- •Truy lỗi mutation state về một array hay object dùng chung bằng các ví dụ Avoid Side Effects, vốn mô tả đúng kiểu lỗi này qua ví dụ array giỏ hàng.
- •Đọc chương SOLID trước khi tái cấu trúc các class JavaScript, vì chính chương Functions cũng dẫn ngược về SOLID khi giải thích lý do loại bỏ code trùng lặp.
- •Kết hợp với một linter thật sự nếu bạn muốn các quy tắc này được thực thi tự động thay vì chỉ dừng ở mức thảo luận, vì bản thân tài liệu không chạy kiểm tra trên code của bạn.
Tài Liệu Này Dành Cho Ai?
Clean Code JavaScript phù hợp với developer muốn một tài liệu tham khảo miễn phí, có ví dụ cụ thể về đặt tên, kích thước hàm, và kỷ luật side effect, cũng như tech lead muốn có một tài liệu chung để chỉ cho người mới thay vì lặp lại cùng một góp ý review code. Nó hợp cho các team thảo luận phong cách code không chính thức trong PR. Bỏ qua nếu bạn cần thực thi tự động (hãy dùng linter cho việc đó) hoặc đang làm việc sâu với các pattern riêng của TypeScript, vì ví dụ ở đây chỉ là JavaScript thuần.
Điểm Mạnh
- ✓Mỗi nguyên tắc đều có một đoạn code JavaScript "Bad" và "Good" đặt cạnh nhau, không chỉ là lời khuyên suông.
- ✓Có nguồn gốc rõ ràng, được ghi công (cuốn Clean Code của Robert C. Martin) thay vì trình bày các quy tắc như thể tự nghĩ ra hay không rõ xuất xứ.
- ✓Trải dài mười hai chương, từ những vấn đề phạm vi nhỏ như đặt tên biến đến các vấn đề cấp hệ thống như SOLID, Concurrency, và Error Handling.
- ✓Giấy phép MIT, nên không có gì ngăn một team fork lại, dịch ra ngôn ngữ khác, hay lấy từng phần đưa vào tài liệu nội bộ.
- ✓Thẳng thắn về giới hạn của chính mình: README nói rõ không phải nguyên tắc nào cũng được đồng thuận hoàn toàn, thay vì trình bày chúng như luật đã an bài.
Những Điều Cần Lưu Ý
- △Đây là tài liệu đọc, không phải công cụ: không có gì trong tài liệu tự động kiểm tra code của bạn, nên việc áp dụng phụ thuộc hoàn toàn vào việc reviewer có để ý lúc review PR hay không.
- △Tài liệu được cung cấp không nêu số phiên bản, ngày cập nhật gần nhất, hay changelog, nên độ mới của các ví dụ theo phong cách ES2015/ES6 so với JavaScript hiện đại không được ghi rõ.
- △Testing, Concurrency, Error Handling, Formatting, và Comments xuất hiện như tên chương trong mục lục, nhưng nội dung thực tế của chúng không được mô tả chi tiết trong phần dữ kiện có ở đây.
- △Tài liệu chỉ bao phủ JavaScript thuần; các pattern riêng của TypeScript như generic hay type narrowing không nằm trong phạm vi này.
- △Chính README cũng lưu ý rằng không phải nguyên tắc nào cũng cần tuân theo tuyệt đối, và càng ít nguyên tắc được đồng thuận hoàn toàn, nên hãy xem đây là điểm khởi đầu để thảo luận chứ không phải một checklist bắt buộc.
Tài Liệu Và Lựa Chọn Thay Thế Liên Quan
Câu Hỏi Thường Gặp
Clean Code JavaScript được phát hành theo giấy phép MIT, theo thông tin trên repository GitHub của nó.
Không. README nói rõ Clean Code JavaScript không phải là style guide; đây là tập nguyên tắc để viết JavaScript dễ đọc, tái sử dụng được, và tái cấu trúc được.
Có. SOLID là một trong mười hai chương trong mục lục của tài liệu, và chương Functions cũng nhắc tới SOLID khi giải thích lý do nên loại bỏ code trùng lặp.
Clean Code JavaScript chuyển thể trực tiếp các nguyên tắc từ cuốn sách Clean Code của Robert C. Martin, viết lại cùng những ý tưởng đó bằng ví dụ code JavaScript thay vì ngôn ngữ gốc trong sách.
README mô tả tài liệu như một thước đo để đánh giá chất lượng code mà một team tạo ra, đồng thời lưu ý rằng biết các nguyên tắc này không lập tức khiến ai đó trở thành developer giỏi hơn.
Không. README nói thẳng rằng không phải nguyên tắc nào cũng cần tuân theo tuyệt đối, và càng ít nguyên tắc được tất cả developer đồng thuận hoàn toàn.
Repo liên quan
clean-code-javascript có đáng để bạn bỏ thời gian?
ChatGPT, Claude và Perplexity đều đọc được trang này. Hỏi thử xem họ nghĩ gì về clean-code-javascript.
