Đừng Biến Code Thành Rác - 5 Cách Clean Code

Đừng Biến Code Thành Rác - 5 Cách Clean Code

Phát triển phần mềm là một quá trình hết sức phức tạp, với code đóng vai trò chính yếu. Độ phức tạp của phần mềm liên quan trực tiếp đến chất lượng của code, nếu code dễ hiểu, dễ sửa chữa và linh hoạt thì chắc chắn đó là một phần mềm tốt.
Dĩ nhiên, code xấu thì vẫn chạy như thường, nhưng nếu code “sạch”, chắc chắn phần mềm sẽ chạy trơn tru hơn, gặp ít lỗi hơn và mang lại hiệu quả hoạt động cao hơn. Không ai muốn phải làm việc với những dòng code lộn xộn, lủng củng, tới khi cần sửa thì chẳng hiểu nổi code đó viết gì. Bởi thế, viết code sạch là tiêu chuẩn cần có của mọi LTV, dù điều này đôi lúc thật khó khăn bởi những áp lực về mặt thời gian hoặc đơn giản chỉ là do sự cố gắng của bản thân mỗi LTV. Code ẩu có thể tiết kiệm thời gian lúc đó, những sẽ gây tốn thời gian hơn khi cần bảo trì hoặc tệ hơn là tạo ra vô số bug mà sau đó bạn sẽ mất hàng giờ để ngồi dò và fix.
Bài viết này sẽ chia sẻ một số kỹ thuật để viết code sạch. Những kỹ thuật này sẽ giúp bạn trở thành một lập trình viên giỏi hơn, bất kể bạn là người mới bắt đầu hay một lập trình viên có kinh nghiệm.

1. Code cho người đọc, đừng code cho máy

Có nhiều LTV có khả năng viết ra những hàm rất phức tạp, nhưng đôi khi họ quên mất rằng, họ không chỉ viết code cho máy tính đọc. Bất kì phần mềm nào cũng cần được tiếp quản, bảo trì và sửa chữa trong tương lai. Họ chẳng thể ở đấy 24/24 để mà tự fix mọi lỗi của mình hay nâng cấp thêm mọi tính năng phát sinh. Sẽ có một ngày có LTV khác làm những điều đó thay họ. Bởi thế, viết code cho người khác có thể đọc được là điều quan trọng nhất.
Bạn có thể bắt đầu thực hiện việc này bằng cách đặt tên lớp, phương thức và biến thích hợp. Chúng phải đơn giản và có ý nghĩa. Bất kể tên nào bạn đề cập trong code của mình, nó phải đáp ứng ba mục đích: nó làm gì, tại sao nó tồn tại và cách nó được sử dụng.
Làm cho code của bạn đủ tốt để các nhà phát triển khác có thể hiểu nó và không phải mất nhiều thời gian để giải mã nó là một trong những phẩm chất mong muốn của code sạch.

2. Code chứ không phải cỗ máy vạn năng

Nhiều LTV thường hay viết những đoạn code quá phức tạp. Họ giao quá nhiều trách nhiệm trong một lớp, điều này làm cho nó phức tạp và khó duy trì.
Hãy hiểu điều này bằng một ví dụ.
Giả sử chúng ta có một class Candidate với hai nhiệm vụ, như được đề cập bên dưới:
public class Candidate
{
public int Candidate_Id { get; set; }
public string Candidate_Name { get; set; }
public bool InsertIntoCandidateTable(Candidate candidate)
{
// Insert into candidate table.
return true;
} public void GenerateReport(Candidate candidate)
{
// Report generation with Candidate data.
}
}
Ở đây, class Candidate đang xử lý hai nhiệm vụ: chèn dữ liệu vào bảng và tạo một số báo cáo cho ứng viên.
Bây giờ, giả sử rằng hiện tại, việc tạo báo cáo đang diễn ra ở định dạng Excel. Nếu có yêu cầu đối với định dạng PDF, thì điều đó sẽ yêu cầu thay đổi trong class Candidate.
Theo các nguyên tắc SOLID, quy tắc đầu tiên nêu rõ nhiệm vụ duy nhất, rằng một class chỉ nên có 1 nhiệm vụ duy nhất và cần có một lý do để thay đổi class đó.
Class Candidate đang vi phạm nguyên tắc này. Chúng ta nên chỉ định một nhiệm vụ duy nhất cho một class, như đoạn code dưới đây:
public class CandidateReportGeneration
{
public void GenerateReport(Candidate candidate)
{
// Report generation with Candidate data.
}
}
Ở đây, chúng ta đã tạo một class riêng cho chức năng tạo báo cáo. Class trên sẽ không ảnh hưởng class Candidate nếu chúng ta cần sửa đổi các kỹ thuật tạo báo cáo trong tương lai.
3. Viết Comment cho tử tế
Bất kể bạn viết code đơn giản đến mức nào, những người khác chắc chắn sẽ mất thời gian để hiểu nó. Ngay đến chính bạn nhìn lại code của mình sau 1-2 tháng khéo khi còn cảm thấy khó hiểu nữa cơ mà.
Bạn có thể tiết kiệm thời gian của người khác và của bạn bằng cách thêm nhận xét những đoạn code của bạn. Các nhận xét ngắn và đơn giản làm cho mã của bạn dễ hiểu hơn rất nhiều. Cố gắng tạo thói quen này sẽ giúp bạn duy trì codebase của mình mà không gặp nhiều khó khăn.

4. Đừng quên format code

Code sạch không chỉ là một tiêu chuẩn về chức năng mà còn cả ở mặt hình thức nữa. Một đoạn code đơn giản được viết với định dạng kém sẽ vẫn khó hiểu.
Tôi sẽ không phân vân giữa khoảng cách và thụt lề, nhưng bạn nên sử dụng bất kỳ cách nào bạn cảm thấy hài lòng. Định dạng không chỉ cải thiện khả năng đọc mã của bạn mà còn giúp cải tiến hoặc sửa đổi dễ dàng hơn.
Có một số công cụ phân tích mã tĩnh như StyleCop, FxCop, Resharper, SonarQube và nhiều công cụ khác. Bạn có thể chọn một tùy theo ngôn ngữ lập trình của mình. Những công cụ này không chỉ giúp bạn định dạng mà còn cung cấp những thông tin chi tiết khác có thể giúp bạn code sạch dễ dàng hơn.

5. Tái cấu trúc code để tối ưu hóa

Mọi lập trình viên đều cố gắng hết sức mình trong khi code. Đôi khi, có thể bạn code theo cách tốt nhất, hiệu quả nhất có thể tại thời điểm đó. Nhưng đôi khi cũng là code đó, sau 1 tháng hay 1 năm đã trở nên kém cỏi và lỗi thời rồi.
Một trong những lý do cho việc này có thể là giới hạn của ngôn ngữ lập trình. Nếu bạn code được tối ưu hóa và hiệu quả nhất bằng Java vào năm 2015, thì sau một số phiên bản mới của ngôn ngữ này, có thể có các kỹ thuật tốt hơn hoặc các hàm tích hợp để thực hiện một nhóm hoạt động hiệu quả hơn. Điều này làm cho code cũ của bạn không hiệu quả và cần được cấu trúc lại.
Lý do phần lớn phần mềm chết theo thời gian là do nhà phát triển sơ suất trong việc cấu trúc lại code để tối ưu hóa. Ví dụ: hãy xem đoạn code C # bên dưới:
// Old approachIf (sampleObject != null)
{
If (sampleObject.result != null)
{
string result = sampleObject.result;
}
}
// Refactored approach
string result = sampleObject?.result;
Ở cách tiếp cận cũ, trước tiên chúng ta kiểm tra xem đối tượng có rỗng hay không, sau đó kiểm tra xem một giá trị cụ thể bên trong đối tượng đó có khả dụng hay không rồi mới gán giá trị đó cho một biến để tránh ngoại lệ.
Trong cách tiếp cận mới, chúng ta đang sử dụng tính năng C # mới, toán tử điều hướng an toàn (?.), Đã được giới thiệu trong phiên bản 6.0. Điều này cho phép chúng ta truy vấn trực tiếp các thuộc tính của đối tượng và trong trường hợp một thuộc tính có null, thì thay vì ném một ngoại lệ tham chiếu null, nó sẽ trả về giá trị null.
Chỉ với một tính năng mới, chúng ta đã có thể chuyển đổi bảy dòng code thành một dòng. Đây là một ví dụ về cách chúng ta có thể đơn giản hóa và tối ưu hóa code của mình với các tính năng mới trong ngôn ngữ lập trình.

Tạm kết

Tóm lại, bằng cách ghi nhớ những điều dưới đây, bất kỳ lập trình viên nào cũng có thể viết code sạch:
  • Đặt tên có ý nghĩa, nhớ rằng code bạn viết sẽ được người khác duy trì.
  • Mỗi class nên có một nhiệm vụ duy nhất
  • Comment code rất quan trọng, chúng tiết kiệm rất nhiều thời gian cho bạn và mọi người.
  • Định dạng mã là một điểm cạnh quan trọng của vì nó cải thiện khả năng đọc mã.
  • Thỉnh thoảng hãy cấu trúc lại code cũ để làm cho ứng dụng nhanh và hiệu quả hơn.
Tất cả các lập trình viên nên ghi nhớ những điểm này trong khi code. Clean code mất nhiều thời gian hơn một chút, nhưng nó giúp tiết kiệm tổng thời gian kiểm tra, gỡ lỗi và bảo trì.
Cảm ơn vì đã đọc!