Hai loại chú thích
JavaScript có hai cú pháp chú thích (comment). Chú thích một dòng bắt đầu bằng // và kéo dài đến hết dòng:
Chú thích khối bắt đầu bằng /* và kết thúc ở */ kế tiếp. Nó có thể trải dài bao nhiêu dòng tùy ý:
Cả hai dạng đều bị engine JavaScript bỏ qua hoàn toàn. Chúng tồn tại cho con người: cho bạn, cho đồng đội, và cho chính bạn sáu tháng sau khi đọc lại đoạn code này.
Chú thích một dòng
// là dạng bạn sẽ dùng nhiều nhất. Bất cứ thứ gì nằm sau // trên cùng một dòng đều là chú thích; dòng tiếp theo trở lại là code:
Chú thích ở cuối dòng (sau một câu lệnh) ổn với ghi chú ngắn. Nếu ghi chú dài đến mức phải xuống dòng, hãy chuyển nó lên một dòng riêng phía trên đoạn code: chú thích cuối dòng quá dài sẽ bị trình soạn thảo cắt bớt và bị người đọc bỏ qua.
Chú thích khối
/* */ đáng dùng trong hai trường hợp: chú thích cần nhiều hơn một dòng, và chú thích nằm giữa một biểu thức.
Một cái bẫy: chú thích khối không lồng nhau được. */ đầu tiên sẽ kết thúc chú thích, kể cả khi bạn tưởng mình vẫn đang ở trong một chú thích bên ngoài:
/* outer /* inner */ still outer */
// SyntaxError - the first */ closed the block,
// and "still outer */" is now invalid code.
Nếu cần vô hiệu hóa đoạn code đã chứa /* */, hãy dùng // cho từng dòng.
Vô hiệu hóa code bằng chú thích
Khi gỡ lỗi, bạn sẽ thường muốn tạm tắt vài dòng code. Cả hai dạng chú thích đều làm được:
Trình soạn thảo nào cũng có phím tắt cho việc này: Ctrl+/ trên Windows/Linux, Cmd+/ trên Mac, để bật tắt // cho các dòng đang chọn. Học một lần, bạn sẽ dùng nó mỗi ngày.
Code bị vô hiệu hóa bằng chú thích chỉ nên là tạm thời. Đừng commit cả nghĩa địa code chết với dòng // old version, keep just in case phía trên. Hệ thống quản lý phiên bản đã nhớ code cũ giúp bạn rồi. Cứ xóa đi.
Chú thích vì sao, không chú thích cái gì
Đây là quy tắc duy nhất phân biệt chú thích có ích với chú thích gây nhiễu. Code đã cho thấy nó làm cái gì. Một chú thích tốt giải thích vì sao.
Chú thích gây nhiễu:
Những chú thích đó không nói với người đọc điều gì mà code chưa nói. So sánh với:
Cả hai chú thích đều nhắc đến điều mà người đọc không thể tự suy ra chỉ từ code: một ràng buộc bên ngoài, một hành vi đặc biệt đã được ghi nhận. Đó là tiêu chuẩn. Nếu xóa chú thích đi mà không ai bối rối, thì chú thích đó không đáng để giữ.
JSDoc: chú thích mà công cụ đọc được
JSDoc là một quy ước viết chú thích khối để mô tả hàm theo cách có cấu trúc. Trình soạn thảo và công cụ kiểm tra kiểu đọc chúng và cho bạn gợi ý tự động hoàn thành cùng tài liệu khi rê chuột tốt hơn:
Phần mở đầu /** (hai dấu sao) là thứ đánh dấu đây là JSDoc chứ không phải chú thích khối thông thường. Bạn không cần JSDoc cho mọi hàm: nó đáng giá nhất với API công khai, các tiện ích dùng chung, và những chỗ mà kiểu dữ liệu chưa hiển nhiên từ code.
Vài thói quen nên giữ
- Đặt chú thích gần đoạn code nó mô tả. Chú thích nằm cách dòng liên quan mười dòng dễ bị lệch khi code thay đổi.
- Cập nhật chú thích khi bạn sửa code. Chú thích lỗi thời còn tệ hơn không có chú thích: nó nói dối người đọc tiếp theo.
- Ưu tiên đặt tên tốt hơn là viết thêm chú thích.
const d = 86400000;cần chú thích.const MILLISECONDS_PER_DAY = 86_400_000;thì không. - Đánh dấu vấn đề tạm thời bằng
TODO:hoặcFIXME:. Hầu hết trình soạn thảo đều tô sáng chúng, và chúng dễ tìm bằng grep về sau.
Lưu ý về chú thích HTML và JavaScript
Nếu bạn viết JavaScript bên trong tệp HTML, đừng nhầm hai kiểu chú thích. HTML dùng <!-- -->; JavaScript dùng // và /* */. Bên trong thẻ <script>, chỉ các dạng của JavaScript mới có tác dụng:
<script>
// Correct - JS comment inside <script>
/* Also correct */
<!-- Wrong - this is an HTML comment and will break your JS -->
console.log("hi");
</script>
Vì lý do lịch sử từ các trình duyệt rất cũ, trình duyệt từng chấp nhận <!-- --> bên trong script, nhưng hãy coi đó là cách viết hỏng và đừng dùng.
Tiếp theo: khai báo biến
Giờ bạn đã biết cách chú thích code, đến lúc viết code thôi. JavaScript có ba cách khai báo biến, let, const và var, và chọn đúng cách là quyết định thật sự đầu tiên bạn đưa ra trên mỗi dòng code. Đó là nội dung tiếp theo.
Câu hỏi thường gặp
Làm sao để viết chú thích trong JavaScript?
Dùng // cho chú thích một dòng: mọi thứ phía sau nó trên dòng đó đều bị bỏ qua. Dùng /* ... */ cho chú thích khối có thể trải dài nhiều dòng. Cả hai đều dùng được ở bất kỳ đâu trong tệp .js và trong thẻ <script> bên trong HTML.
// và /* */ trong JavaScript khác nhau thế nào?
// kéo dài đến hết dòng hiện tại rồi dừng. /* */ bắt đầu từ /* và kết thúc ở */ kế tiếp, nên nó có thể bao nhiều dòng hoặc nằm ngay giữa một biểu thức. Dùng // cho ghi chú ngắn, /* */ khi bạn cần nhiều hơn một dòng hoặc muốn chú thích một phần của biểu thức.
Làm sao để vô hiệu hóa một khối code bằng chú thích trong JavaScript?
Bọc nó trong /* */, hoặc thêm // vào đầu mỗi dòng. Hầu hết trình soạn thảo đều có phím tắt: Ctrl+/ (Cmd+/ trên Mac) bật tắt chú thích // cho các dòng đang chọn. Tránh lồng /* */ bên trong một /* */ khác: */ đầu tiên sẽ đóng chú thích bên ngoài và bạn sẽ gặp lỗi cú pháp.
Khi nào nên viết chú thích?
Chú thích vì sao, không chú thích cái gì. Nếu code đang làm điều gì đó không hiển nhiên, như một cách lách lỗi, một quy tắc nghiệp vụ hay một mẹo tối ưu hiệu năng, hãy giải thích vì sao. Đừng kể lại những gì code đã nói rõ. Một biến hay một hàm được đặt tên tốt sẽ khiến phần lớn chú thích trở nên thừa.