Bài 1.7. Comment và định dạng code trong C++

Bài 1.7. Comment và định dạng code trong C++
Khi bắt đầu học lập trình, chúng ta thường tập trung vào việc làm cho code chạy được. Nhưng khi các dự án lớn dần lên và bạn bắt đầu làm việc cùng người khác, một khía cạnh khác trở nên quan trọng không kém: làm cho code dễ đọc và dễ hiểu. Viết code không chỉ là giao tiếp với máy tính, mà còn là giao tiếp với chính bạn trong tương lai và với các đồng đội của bạn.
Đây là lúc Comment (Chú thích) và Code Formatting (Định dạng mã) thể hiện vai trò của mình. Chúng là những công cụ vô giá giúp biến một mớ code lộn xộn, khó hiểu thành một tác phẩm rõ ràng, mạch lạc và chuyên nghiệp.
1. Comment (Chú thích) - Để lại lời nhắn cho người đến sau
a. Comment là gì và tại sao phải dùng?
Comment là những dòng văn bản trong mã nguồn mà trình biên dịch sẽ hoàn toàn bỏ qua. Chúng không ảnh hưởng gì đến cách chương trình thực thi. Vậy tại sao chúng lại quan trọng?
- Giải thích logic phức tạp: Dùng comment để diễn giải một thuật toán khó, một công thức toán học, hay một đoạn xử lý nghiệp vụ không tường minh.
- Làm rõ mục đích ("Why", không phải "What"): Một comment tốt sẽ giải thích tại sao bạn lại viết code theo cách đó, chứ không chỉ mô tả lại code đang làm gì.
- Tạm thời vô hiệu hóa code (Debugging): Khi gỡ lỗi, bạn có thể "comment out" (chuyển thành chú thích) một đoạn code để tạm thời không thực thi nó, thay vì phải xóa đi.
b. Các loại Comment trong C++
C++ cung cấp hai cách để viết comment:
Kiểu 1: Comment trên một dòng (Single-line Comment)
Bắt đầu bằng hai dấu gạch chéo //
. Mọi thứ từ //
cho đến cuối dòng đó sẽ được coi là comment.
#include <iostream>
int main() {
// Đây là một comment trên một dòng.
// Dùng để khai báo bán kính của hình tròn.
double banKinh = 5.0;
double dienTich = 3.14159 * banKinh * banKinh; // Comment cũng có thể đặt cuối dòng.
cout << "Dien tich la: " << dienTich << endl;
// cout << "Dong nay se khong duoc thuc thi" << endl;
return 0;
}
Kiểu 2: Comment trên nhiều dòng (Multi-line Comment)
Bắt đầu bằng /*
và kết thúc bằng */
. Tất cả nội dung nằm giữa cặp ký hiệu này sẽ được coi là comment, bất kể nó kéo dài bao nhiêu dòng.
#include <iostream>
/*
Đây là một comment trên nhiều dòng.
Nó rất hữu ích để viết những giải thích dài
hoặc để mô tả thông tin về một file hoặc một hàm.
Tác giả: FullhouseDev
Ngày tạo: 2025-07-12
*/
int main() {
/* Chúng ta cũng có thể dùng nó để vô hiệu hóa
cả một khối code lớn khi cần gỡ lỗi.
int x = 5;
int y = 10;
cout << x + y << endl;
*/
cout << "Hello, world!" << endl;
return 0;
}
c. Nghệ thuật viết Comment hiệu quả
Không phải cứ viết comment là tốt. Một comment tồi tệ còn gây hại hơn là không có comment.
Đừng mô tả điều hiển nhiên: Code nên tự nó diễn tả được mục đích.
// --- TỒI --- i++; // Tăng i lên 1 // --- TỐT --- soLanThuLai++; // Tăng số lần thử lại kết nối khi thất bại
Giải thích "Tại sao", không phải "Làm gì":
// --- TỒI --- // Kiểm tra xem a có lớn hơn b không if (a > b) { ... } // --- TỐT --- // Đảm bảo rằng điểm số tối đa luôn lớn hơn điểm số tối thiểu if (diemToiDa > diemToiThieu) { ... }
- Giữ comment luôn cập nhật: Một comment sai lệch với code còn nguy hiểm hơn không có comment. Khi bạn thay đổi code, hãy nhớ cập nhật lại comment tương ứng!
2. Định dạng Code - Sự ngăn nắp của một lập trình viên
Định dạng code (hay còn gọi là code style) là bộ quy tắc về cách bạn trình bày mã nguồn của mình. Một định dạng nhất quán giúp code dễ đọc hơn rất nhiều.
a. Thụt lề (Indentation)
Đây là quy tắc quan trọng nhất. Mỗi khi bạn bắt đầu một khối lệnh mới (bên trong {...}
của if
, for
, while
, hàm...), bạn phải thụt vào một cấp. Điều này giúp mắt người dễ dàng nhận biết cấu trúc của code.
Quy ước phổ biến là thụt vào 4 khoảng trắng (hoặc một phím Tab được cấu hình tương đương 4 khoảng trắng).
// --- ĐỊNH DẠNG TỒI, RẤT KHÓ ĐỌC ---
#include <iostream>
int main() {
int n = 5;
for (int i = 0; i < n; i++) {
if (i % 2 == 0) {
cout << i << " la so chan." << endl;
} else {
cout << i << " la so le." << endl;
}
}
return 0;
}
// --- ĐỊNH DẠNG TỐT, RÕ RÀNG MẠCH LẠC ---
#include <iostream>
int main() {
int n = 5;
for (int i = 0; i < n; i++) {
if (i % 2 == 0) {
cout << i << " la so chan." << endl;
} else {
cout << i << " la so le." << endl;
}
}
return 0;
}
b. Khoảng trắng (Whitespace)
Sử dụng khoảng trắng một cách hợp lý để "tạo không gian thở" cho code.
- Xung quanh các toán tử: Đặt khoảng trắng xung quanh các toán tử (
=
,+
,-
,*
,/
,==
,<
...).- Nên:
x = a + b;
- Không nên:
x=a+b;
- Nên:
- Sau dấu phẩy: Đặt khoảng trắng sau dấu phẩy trong danh sách tham số của hàm.
- Nên:
hamTinhTong(a, b);
- Không nên:
hamTinhTong(a,b);
- Nên:
- Dòng trống: Dùng các dòng trống để tách các khối logic khác nhau trong một hàm, giúp người đọc phân biệt được các bước xử lý.
c. Quy tắc về dấu ngoặc nhọn {}
Có hai phong cách phổ biến. Điều quan trọng nhất là chọn một kiểu và tuân thủ nó trong toàn bộ dự án.
- Kiểu 1: Dấu ngoặc mở trên cùng dòng
if (dieuKien) { // code }
- Kiểu 2: Dấu ngoặc mở trên dòng mớiCả hai đều đúng, nhưng việc trộn lẫn chúng trong một file sẽ làm code trông rất lộn xộn.
if (dieuKien) { // code }
3. Ví dụ tổng hợp: Từ "Xấu" đến "Tốt"
Hãy xem một đoạn code thực hiện việc tính tổng các số chẵn từ 0 đến một số N cho trước.
Phiên bản "Xấu" - Khó đọc, không có chú thích
#include <iostream>
int main(){
int N=10;int s=0;
for(int i=0;i<=N;i++){
if(i%2==0){s=s+i;
}}
cout<<"Ket qua: "<<s<<endl;
return 0;}
Dù code trên chạy đúng, nhưng nó thật sự là một "cơn ác mộng" để đọc hiểu và bảo trì.
Phiên bản "Tốt" - Định dạng sạch sẽ, comment rõ ràng
#include <iostream>
/*
* Chương trình này tính tổng tất cả các số chẵn
* từ 0 cho đến một giá trị N cho trước.
*/
int main() {
// N là giới hạn trên của dãy số cần tính tổng
const int N = 10;
int tong = 0; // Khởi tạo biến để lưu kết quả tổng
// Duyệt qua tất cả các số từ 0 đến N
for (int i = 0; i <= N; i++) {
// Kiểm tra nếu số hiện tại là số chẵn
if (i % 2 == 0) {
// Cộng số chẵn vào tổng
tong = tong + i;
}
}
// In kết quả cuối cùng ra màn hình
cout << "Tong cac so chan tu 0 den " << N << " la: " << tong << endl;
return 0;
}
Bạn có thấy sự khác biệt không? Phiên bản thứ hai không chỉ dễ đọc hơn mà còn cho thấy sự chuyên nghiệp và cẩn thận của người viết.
Bằng cách áp dụng những quy tắc đơn giản về comment và định dạng code, bạn đang đầu tư vào tương lai của chính mình và của dự án. Một thói quen tốt từ bây giờ sẽ giúp bạn tiết kiệm vô số giờ gỡ lỗi và làm việc nhóm hiệu quả hơn sau này.
Comments