Tiếp theo Comment Code - Tại sao chúng ta nên Comment Code? (p1)
Và đa phần project share trên mạng hiện nay thiếu trầm trọng comment, dẫn tới người xem chẳng hiểu các bạn code như thế nào, dòng code đó để làm gì . Khi các bạn code, với mạch suy nghĩ của bạn thì bạn thấy đơn giản không cần thiết phải comment, nhưng với những người hoàn toàn không biết bạn sẽ làm gì và đang làm gì thì thật là tốn thời gian để hiểu được code của bạn . Mình đọc sách hoặc xem một vài tut thấy một lớp có nội dung khoảng 300 dòng code thì người ta comment thêm tới 300 dòng, như thế dù dài dòng nhưng mà mình thấy hợp lí lắm vì đó là theo hướng giáo dục …Với những dự án lớn, phức tạp, thì cách tổ chức code là 1 trong những vấn đề đặc biệt quan trọng, vì mục đích dễ dàng update sau này, dễ để mọi người nắm bắt code . . . . . Dưới đây là 1 đoạn code trong source mình down từ trang MSDN về, đây là trang dạy mọi ngôn ngữ và công nghệ của Microsoft.
/// <summary>
/// This timer is started when the player clicks
/// two icons that don't match,
/// so it counts three quarters of a second
/// and then turns itself off and hides both icons.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timer1_Tick(object sender, EventArgs e)
{
// Stop the timer.
timer1.Stop();
// Hide both icons.
firstClicked.ForeColor = firstClicked.BackColor;
secondClicked.ForeColor = secondClicked.BackColor;
// Reset firstClicked and secondClicked
// so the next time a label is
// clicked, the program knows it's the first click.
firstClicked = null;
secondClicked = null;
}
/// <summary>
/// Check every icon to see if it is matched, by
/// comparing its foreground color to its background color.
/// If all of the icons are matched, the player wins.
/// </summary>
private void CheckForWinner()
{
// Go through all of the labels in the TableLayoutPanel,
// checking each one to see if its icon is matched.
foreach (Control control in tableLayoutPanel1.Controls)
{
Label iconLabel = control as Label;
if (iconLabel != null)
{
if (iconLabel.ForeColor == iconLabel.BackColor)
return;
}
}
// If the loop didn’t return, it didn't find
// any unmatched icons.
// That means the user won. Show a message and close the form.
MessageBox.Show("You matched all the icons!", "Congratulations!");
Close();
}
- Nó cho phép một lập trình viên có nhìn vào một đoạn code và biết tại sao nó tồn tại.
- Nó làm giảm các tình huống mà một phần của code bị coi là không rõ ràng dẫn đến đoạn code đó sửa đổi và do đó code nguồn không thể hoạt động.
- Viết comment để nắm bắt ý nghĩa của đoạn code đó cũng giống như viết các xét nghiệm y học để chứng minh rằng phần mềm của bạn có thể là những gì được mong đợi.
Robert C. Martin tác giả cuốn Clean Code tuyên bố rằng (nói lại theo cách hiểu của mình): “Comment chính là lời xin lỗi dành cho các đoạn code tệ”. Có gì sai với việc giải thích một thuật toán phức tạp hoặc một mảng dài và phức tạp của 1 đoạn code với một comment mô tả?
Vì vậy, sau khi viết một đoạn code phức tạp được viết bằng một ngôn ngữ lập trình, tại sao không thêm một lời nhận xét ngắn gọn mô tả và giải thích hoạt động của các đoạn code đơn giản, thân thiện và dễ hiểu?
Các comment cung cấp cho người sử dụng và các lập trình viên khác rất nhiều lợi ích, đóng góp có ý nghĩa đối với tính linh động của code giữa các nền tảng khác nhau, dễ đọc và dễ tiếp cận.
Bằng cách này, thay vì các lập trình viên (bao gồm cả bản thân mình) phải đọc toàn bộ các dòng thuật toán để tìm ra những gì nó làm, họ có thể chỉ cần đọc các comment mô tả bạn đã viết. Không ai muốn giải thích từng dòng code trong chương trình của bạn, và chẳng ai muốn đọc một cuốn sách để hiểu code của bạn.
“Bất kỳ kẻ ngốc nào cũng có thể viết mã để một máy tính có thể hiểu được. Các lập trình viên giỏi viết mã để cho những người khác có thể hiểu được“. ~ Martin Fowler
Phần tiếp theo sẽ là Bad Comment & Good Comment.