Đi tìm Mã có Mùi (Code Smell)

Đi tìm Mã có Mùi (Code Smell)

Code Smell là cái quái gì?

Hãy để tôi cung cấp cho bạn định nghĩa cá nhân của tôi và một số ví dụ để hiểu rõ hơn về những gì chúng ta đang nói đến.

Nếu bạn tìm kiếm Code Smell đâu đó trên internet, bạn sẽ tìm thấy hàng tá định nghĩa và phân loại khác nhau, đó là lý do tại sao tôi sẽ làm những gì mà mọi nhà phát triển JavaScript sẽ làm, tạo khuôn khổ của riêng tôi. Ý tôi là, đưa ra định nghĩa của riêng tôi.

Túm cái váy lại: Code Smell là cảm giác sau cái nhìn đầu tiên về một đoạn mã khiến bạn ngay lập tức nghĩ rằng có điều gì đó không ổn. Bạn có thể chưa có giải pháp tốt hơn, nhưng càng xem xét nhiều đoạn mã, bạn càng nghĩ nó không ổn.

Bằng chứng lịch sử

Thuật ngữ này ban đầu được Kent Beck giới thiệu vào những năm 90 nhưng hiện nay nó khá phổ biến và được sử dụng trên tất cả các ngôn ngữ.

Một trong nhưng lý do sao khó có định nghĩa chung là vì mùi mã có thể khác nhau tuỳ thuộc vào ngôn ngữ và ngữ cảnh. Không thể có một danh sách tiêu chuẩn áp dụng ở mọi nơi với cùng một mức độ liên quan chính xác, nhưng tôi sẽ tập trung vào một số danh sách phổ biến nhất.

1) Duplicate Code

Tôi nghĩ rằng phổ biến nhất là mã trùng lặp. Bạn có thể ngửi thấy điều này khi bạn thấy mình đang sao chép và dán một vài dòng mã ở đây và ở đó.

Tôi không nói rằng việc sao chép và dán là bị cấm, nhưng khi bạn làm điều đó, vui lòng suy nghĩ lại về điều đó. Bạn có cách nào tốt hơn để tổ chức mã để tránh việc dán bản sao này không? Ví dụ, bạn có thể đặt mã trong một hàm mà bạn có thể gọi khi cần.

Tôi biết, giải pháp không phải lúc nào cũng dễ dàng như vậy nhưng tốt hơn hết bạn nên suy luận thêm để tránh lặp lại mã khi không cần thiết.

image.png

2) Phá vỡ quy tắc đặt tên

Một mùi mã phổ biến thực sự khác là về quy ước đặt tên. Xin nhắc lại, bạn sẽ không phải trả tiền cho việc sử dụng các ký tự thừa trong tên biến. Bạn không cần phải sử dụng những cái tên quá dài nhưng cũng không được dùng những cái tên khó hiểu.

Khi ai đó đọc mã của bạn, cần phải hiểu rõ biến là gì, vì vậy hãy tránh những tên có thể có ít hơn 3 hoặc 4 ký tự. Sử dụng i cho "index", nhưng nếu bạn cần lưu trữ một tài khoản, đừng gọi nó là a, chỉ cần sử dụng từ "account".

Ngoài ra, nếu có quy ước về "case", hãy đảm bảo sử dụng đúng. Những thứ đó phụ thuộc nhiều vào ngôn ngữ, nhưng bạn có thể tìm kiếm trực tuyến và có hàng tá hướng dẫn định kiểu. Chọn một và làm theo nó một cách nhất quán.

image.png

3) If-else lồng nhau

Mùi thứ ba bạn có thể dễ dàng nhận thấy là khi bạn có quá nhiều câu lệnh if-else lồng nhau. Trong một số trường hợp, bạn thấy mình thêm một số kiểm tra hoặc điều kiện rỗng trong đó trong nhánh khác, bạn chỉ cần ghi một thông báo và quay lại.

Không có gì sai cả, nhưng hãy lấy ví dụ này. Được rồi, thời gian khá ngắn nên bạn có thể dễ dàng tìm thấy những gì đang diễn ra, nhưng hãy xem điều gì sẽ xảy ra nếu bạn trở về sớm. Mã không sạch hơn nhiều sao?

Đây là một ví dụ nhỏ, nhưng khi bạn thấy mã lồng nhau ở cấp độ thứ ba hoặc thứ tư, hãy nghĩ về nó, bạn có thể loại bỏ một số lồng ghép bằng cách chỉ quay lại trong vài dòng đầu tiên. Điều này sẽ làm cho mã dễ đọc và dễ bảo trì hơn.

image.png

Thử thách Mã có Mùi

Việc phát hiện mùi mã đòi hỏi một chút kinh nghiệm và thực hành, để bạn có thể tìm thấy chúng ngay từ cái nhìn đầu tiên! Bạn chỉ cần nhìn vào một vài dòng mã và tự động có cảm giác rằng có điều gì đó không ổn.

Cảm ơn vì đã đọc bài viết này, tôi hy vọng bạn thấy nó thú vị!