Bỏ qua để đến nội dung

Chú thích trong Rust

Chú thích (comment) là những ghi chú bạn để lại trong code cho con người đọc. Rust hoàn toàn bỏ qua chúng khi biên dịch, nên chúng không bao giờ ảnh hưởng tới cách chương trình chạy. Chú thích tốt giải thích vì sao code làm một việc, chứ không chỉ nói nó làm gì.

Loại chú thích phổ biến nhất bắt đầu bằng //. Mọi thứ sau // trên dòng đó đều bị bỏ qua:

fn main() {
// Đây là một chú thích — Rust bỏ qua hoàn toàn
println!("Xin chào!"); // chú thích cũng có thể nằm ở cuối dòng
}

Kết quả:

Xin chào!
▶ Tự chạy thử

Với một ghi chú dài hơn, bạn có thể bắt đầu mỗi dòng bằng //:

fn main() {
// Chương trình này chào người dùng.
// Nó in ra một dòng chữ duy nhất.
// Được viết làm ví dụ đầu tiên.
println!("Xin chào!");
}

Kết quả:

Xin chào!
▶ Tự chạy thử

Rust cũng hỗ trợ chú thích khối (block comment) nằm giữa /* và */, có thể trải dài nhiều dòng:

fn main() {
/*
Đây là một chú thích khối.
Nó có thể bao nhiều dòng
mà không cần // ở mỗi dòng.
*/
println!("Xin chào!");
}

Kết quả:

Xin chào!
▶ Tự chạy thử

Trong thực tế, phần lớn code Rust dùng // kể cả cho nhiều dòng — đó là thói quen chung của cộng đồng và hợp với các phím tắt trong editor.

Chú thích rất tiện để tạm vô hiệu hóa một dòng trong lúc bạn thử nghiệm:

fn main() {
println!("Dòng này chạy");
// println!("Dòng này tạm thời bị tắt");
}

Kết quả:

Dòng này chạy
▶ Tự chạy thử

Một chú thích chỉ lặp lại code thì chẳng thêm được gì. Code đã nói cái gì xảy ra rồi. Chú thích tốt nói vì sao, hoặc cảnh báo về điều mà người đọc không nhìn thấy được:

fn main() {
let minutes = 135;
// Đồng hồ chỉ hiện số giờ tròn. Phép chia số nguyên bỏ đi
// phần dư, đúng là điều chúng ta muốn ở đây.
let hours = minutes / 60;
let leftover = minutes - hours * 60; // số phút chưa đủ một giờ
println!("{hours} giờ {leftover} phút");
}

Kết quả:

2 giờ 15 phút
▶ Tự chạy thử

So sánh với một chú thích kiểu // chia số phút cho 60. Nó đúng, nhưng ai cũng đọc được minutes / 60. Thông tin hữu ích là vì sao phép chia ở đây là an toàn.

Thêm vài thói quen đáng học:

  • Giữ chú thích luôn cập nhật. Một chú thích không còn khớp với code còn tệ hơn không có chú thích, vì người ta tin vào nó.
  • // TODO: là cách phổ biến để đánh dấu việc còn dang dở, như // TODO: xử lý số âm. Nhiều editor tô sáng nó và có thể liệt kê mọi TODO trong dự án.
  • Chú thích khối trong Rust có thể lồng nhau. Khác với C, bạn có thể bọc đoạn code đã chứa một chú thích /* */ vào trong một chú thích khác, và nó vẫn hoạt động:
fn main() {
/* Tạm thời tắt:
println!("lời chào cũ"); /* chào tất cả mọi người */
*/
println!("lời chào mới");
}

Kết quả:

lời chào mới
▶ Tự chạy thử

Rust có một loại chú thích đặc biệt bắt đầu bằng /// (ba dấu gạch chéo). Đó là doc comment (chú thích tài liệu) — chúng mô tả các hàm, và Rust có thể biến chúng thành một trang web tài liệu duyệt được bằng cargo doc.

/// Cộng hai số với nhau và trả về kết quả.
fn add(a: i32, b: i32) -> i32 {
a + b
}

Là người mới bắt đầu, bạn chưa cần doc comment — chỉ cần biết /// dùng cho tài liệu, còn // dùng cho ghi chú thông thường. Khi bạn sẵn sàng, bài Tài liệu sẽ chỉ cách viết chúng, build tài liệu, và thậm chí biến các ví dụ thành test.

Chương trình này in ra ba dòng. Hãy biến dòng ở giữa thành chú thích để chỉ Dòng 1 và Dòng 3 được in ra. Gợi ý: đặt // ở đầu dòng bạn muốn tắt.

fn main() {
println!("Dòng 1");
println!("Dòng 2");
println!("Dòng 3");
}
Xem lời giải
fn main() {
println!("Dòng 1");
// println!("Dòng 2");
println!("Dòng 3");
}

Kết quả:

Dòng 1
Dòng 3
▶ Tự chạy thử

Giờ hãy in từ Dòng 1 đến Dòng 4, nhưng dùng một chú thích khối duy nhất để tắt dòng 2 và dòng 3. Gợi ý: mở chú thích bằng /* trước dòng 2 và đóng nó bằng */ sau dòng 3.

Xem lời giải
fn main() {
println!("Dòng 1");
/*
println!("Dòng 2");
println!("Dòng 3");
*/
println!("Dòng 4");
}

Kết quả:

Dòng 1
Dòng 4
▶ Tự chạy thử
  • Chú thích là những ghi chú mà Rust bỏ qua; hãy dùng chúng để giải thích code của bạn.
  • // mở đầu một chú thích một dòng (loại phổ biến nhất).
  • /* ... */ là chú thích khối cho nhiều dòng, và chú thích khối có thể lồng nhau.
  • Chú thích tốt giải thích vì sao, chứ không lặp lại điều code đã nói.
  • /// là doc comment, dùng để tạo tài liệu.

Kiểm tra nhanh

1. Rust làm gì với chú thích khi biên dịch code của bạn?

2. Doc comment /// dùng để làm gì?

Điểm: 0 / 2