← Tất cả khoá học

Clean Code: viết code dễ đọc

Code được đọc nhiều hơn viết

Biên soạn bởi Nguyễn Anh Tuấn

Viết code sạch, dễ đọc, dễ bảo trì bằng TypeScript để qua được vòng review khó tính: đặt tên rõ ý định, hàm nhỏ làm một việc, object vs data structure, xử lý lỗi & ranh giới (boundaries), unit test sạch, nhận diện code smell và refactor an toàn - lấy cảm hứng từ sách Clean Code.

12 bài ~248 phút Đã xuất bản

Học xong mèo con làm được gì?

  • Viết code mà người khác - và chính mèo con của 6 tháng sau - đọc hiểu ngay.
  • Đặt tên, chia hàm và xử lý lỗi theo chuẩn mà các đội chuyên nghiệp dùng.
  • Nhận diện "code smell" và refactor an toàn mà không làm vỡ chức năng đang chạy.
  • Qua được vòng review code khó tính ở công ty.

Lộ trình học

  1. 1 Vì sao code sạch quan trọng Code đọc nhiều hơn viết; “sự bừa bộn” (mess) làm chậm cả đội; định nghĩa code sạch & quy tắc Boy Scout. Vì sao dùng TypeScript: kiểu giúp diễn đạt ý định.
  2. 2 Đặt tên có ý nghĩa Đặt tên rõ ý định (intention-revealing), phát âm & tìm được (searchable); tránh viết tắt/tên gây nhiễu & mã hoá kiểu vào tên; một khái niệm một từ.
  3. 3 Hàm nhỏ, làm một việc Hàm nhỏ làm MỘT việc ở một mức trừu tượng; ít tham số (tránh 3+ & cờ boolean); tránh tác dụng phụ ẩn; command-query separation; thay if/switch lặp bằng đa hình.
  4. 4 Bình luận: khi nào cần Bình luận tốt giải thích “vì sao” chứ không “cái gì”; để code tự giải thích bằng tên & hàm; bỏ comment thừa/lỗi thời/bị comment-out; khi nào JSDoc chính đáng.
  5. 5 Định dạng & cấu trúc Định dạng dọc (vertical): khái niệm liên quan đứng gần, hàm gọi gần nhau; mật độ & khoảng trống; độ dài dòng; để máy lo bằng Prettier + ESLint + EditorConfig.
  6. 6 Object vs Data Structure Bất đối xứng object/data: object giấu dữ liệu lộ hành vi, data structure thì ngược lại; tránh hybrid; Luật Demeter (Law of Demeter) tránh "train wreck".
  7. 7 Xử lý lỗi sạch Dùng exception thay mã lỗi/null; viết try-catch trước, thông điệp có ngữ cảnh; đừng trả/nhận null (kiểu hẹp, “?”); bọc lỗi bên thứ ba; đừng nuốt lỗi.
  8. 8 Ranh giới (Boundaries) Ranh giới (boundaries) với code bên thứ ba: bọc API ngoài sau interface (adapter); "learning test" để dò thư viện lạ; đừng để kiểu thư viện rò khắp dự án.
  9. 9 Unit test sạch Test cũng phải sạch: quy tắc F.I.R.S.T; một khái niệm mỗi test; mẫu AAA (Arrange-Act-Assert); tên test kể chuyện; test đỡ lưng cho refactor; ba luật TDD.
  10. 10 Code smell & refactoring Nhận diện mã mùi (code smell): trùng lặp, hàm dài, tham số thừa, magic number, dead code; và refactoring an toàn TỪNG BƯỚC với test đỡ lưng.
  11. 11 Thiết kế đơn giản (Emergence) Bốn quy tắc thiết kế đơn giản (Kent Beck): chạy hết test → không trùng lặp → diễn đạt rõ ý định → tối thiểu phần tử; thiết kế "nổi lên" qua refactor.
  12. 12 Dự án: refactor code “bẩn” Dự án cuối khoá: 3 thử thách refactor bằng TypeScript - hàm rối, God object, code smell - biến "bẩn" thành sạch từng bước nhờ characterization test.

Sắp bắt tay vào dự án thật?

Tên miền, VPS, hosting để đưa sản phẩm lên mạng - chọn ở trang Ưu đãi. Mua qua link là góp thêm “cá” nuôi Mèo, bạn không tốn thêm.

Ưu đãi & công cụ →