Đặt tên biến như thế nào để chuẩn “clean code”

Trước khi nói điều gì, các bạn thử xem đoạn code sau và cho tôi biết mục đích là gì?

OK bạn mất bao nhiêu lần đọc để hiểu ? Đây là đoạn code một thằng em năm nhất hỏi tôi .Nhìn nó rất cơ bản nhưng tôi chẳng thèm đọc nó viết gì, hỏi thẳng nó ý nghĩa của từng biến cho nhanh. Đấy, đó là những đoạn code không sạch, gây ức chế khó tả cho người đọc. Tôi cũng từng code như thế, nhưng từ khi làm việc nhóm ,ý thức phải tạo điều kiện thoải mái nhất cho các thành viên nên đã sửa đổi và cải thiện hơn nhiều. Vậy để mọi người (bao gồm cả bạn) cảm thấy không bị tra tấn khi đọc code thì hãy tìm hiểu về CLEAN CODE ngay bây giờ, hoặc đọc bài viết của tôi để nắm được 1 phần. Hầu hết kiến thức về “clean code” tôi học được đều từ cuốn sách CLEAN CODE kinh điển của Robert Cecil Martin , nên hôm nay tôi sẽ tổng hợp 1 phần trong CLEAN CODE đó là “cách đặt tên biến sao cho chuẩn”.

Cùng tham gia cuộc chiến nào

1. Tên mang mục đích        

Tôi cho rằng đây là qui định bắt buộc và ưu tiên nhất. Hãy chọn tên biểu đạt được mục đích của nó. Điều này hoàn toàn đơn giản phải không? Thay vì muốn biểu hiện danh sách học sinh bằng biến list1 hãy dùng listStudents. Bởi vì list1 là 1 tên vô nghĩa , gây nhầm lẫn và lộn xộn cho người đọc.

Để dễ hiểu hơn, hãy xem qua ví dụ sau:

Với ví dụ trên, chúng ta dễ dàng thấy được sức mạnh của việc lựa chọn tên phù hợp. Vậy tóm lại tên biến đạt yêu cầu phải trả lời được 3 câu hỏi lớn: Tại sao nó tồn tại? Nó dùng để làm gì ? và Làm sao sử dụng nó ? Suy nghĩ một cái tên chuẩn sẽ mất vài giây nhưng nó sẽ tiết kiệm hàng giờ đồng hồ cho bạn và đồng đội của bạn.    

2. Tránh sai lệch thông tin

Không sử dụng studentList để biểu thị nhóm học sinh. Khái niệm nhóm và danh sách là hoàn toàn khác nhau. Trong tường hợp bạn muốn phân nhiều nhóm trong lớp học hãy dùng studentGroup.

Cẩn thận với những tên dài nhưng chỉ có 1 sự thay đổi nhỏ.Nó sẽ làm bạn khó phân biệt được.

    listOfStudentInClass9aBorrowBooksIn2016 .

    listOfStudentInClass9bBorrowBooksIn2016 .    

Bạn có dám chắc rằng bạn sẽ không nhầm 2 biến trên là 1 không?

Tránh những sai lầm không đáng có từ I và l. Nhìn có vẻ ngớ ngẩn nhưng 1 bên là chữ i viết hoa, bên còn lại là chữ l.

3. Tính nhất quán  

Nếu bạn đã dùng user làm tên biến chỉ khách hàng, thì đừng sử dụng tên client ở những phần phía dưới. Chắc chắn điều này sẽ gây không ít phiền hà cho người đọc.

4. Sử dụng tên phát âm được        

Bạn muốn gán một biến logic cho” sự hợp lệ của giá trị ngày tháng năm” . Ta có cụm từ “validation day month year” và bạn đặt tên biến là valdmy cộng với vài dòng comment để giải thích. Nghe có vẻ hợp lí phết. Nhưng:        

 “Gnurt ơi cái biến val đê mờ y của mày hình như có gì đó sai sai ?”    

“Va gì mày?”    

“Vê a lờ đó”  

Thấy sao nào, liệu nó có gây khó chịu cho bạn không? Tôi khi gặp tên biến như thế lúc nào cũng bị gượm ở miệng, cảm giác bị ngắt mạch dòng chảy suy nghĩ của mình. Tên đúng sẽ là :

“Gnurt ơi cái biến valid date của mày hình như có gì đó sai sai ?” (validDate)

Nếu vậy, chúng ta không được phép sử dụng từ viết tắt ?

Tất nhiên, tôi không phản đối việc sử dụng từ viết tắt trong đặt tên. Như ở ví dụ trên mục 1, tôi đã sử dụng GPA để biểu thị điểm trung bình và tôi chắc chắn rằng hầu hết mọi người đều hiểu ý nghĩa biến này. Vì thế hãy thật thận trọng trong việc sử dụng từ viết tắt, chỉ sử dụng những từ viết tắt phù hợp với bối cảnh và mọi người đều có thể hiểu.

5. Sử dụng tên có thể tìm được    

Hãy tưởng tượng bạn đang làm việc trên 1 project lớn gồm một mớ hỗn độn code của thành viên trong team. Ban gặp vấn đề với một biến nhưng tìm mãi không được ? 12h tối nay tới deadline nhưng 8h có hẹn sinh nhật với bạn gái. Bạn đã mất 5 giờ đồng hồ để sửa lỗi nhưng vẫn không giải quyết được … OK giờ đừng tưởng tượng nữa, thấy đỡ kinh hoàng hơn chưa? Vấn đề này xảy ra, khi bạn sử dụng hằng số 7 để biểu thị 1 tuần có 7 ngày hay số 5 là 1 nhóm phải có 5 sinh viên. 

Nếu không sử dụng MAX_MONTH_IN_YEAR mà sử dụng số 12, khi tìm kiếm sẽ gặp rất nhiều biến số 12 được đăt khắp nơi trên chương trình.

6. Tránh những kí tự dư thừa      

Tránh những kí tự đặt phía trước như tiền tố m_ hay thêm kiểu dữ liệu vào đầu tên biến. Tôi cảm thấy khá dư, không cần thiết lắm. Trong lúc làm việc nhóm, tôi cũng loại bỏ những tiền tố và team tôi không phàn nàn gì lắm. Và tôi cũng không thấy ai trong nhóm dùng thế.     

7. Đừng tỏ ra hài hước hay nguy hiểm        

Đừng đem sự hài hước hay cố tỏ ra nguy hiểm vào tên biến. Ví dụ bạn muốn ám chỉ một hành động copy nhưng tỏ ra hài hước với một em trong team nên bạn đặt tên biến là mtp ? Có vẻ vui đấy.Nhưng nó không khiến người đọc code của bạn và một số người khác thấy vui đâu. Một lựa chọn tường minh thường tốt hơn là  một giá trị giải trí. Hãy nhớ vui đúng lúc, nghiêm túc đúng nơi.

8. Qui ước đặt tên class và method        

Tên class hoặc đối tượng tốt nhất nên dùng danh từ hoặc cụm danh từ để đặt. Đối với method thì nên dùng động từ hoặc cụm động từ. Vì method là một hành động nên dùng thế sẽ khiến mọi thứ rõ ràng dễ đọc hơn.  Ví dụ:

Class : Student, firstNumber, secondNumber,…      

Method : run, setName, addCustomer,…

Trên đây là một số qui định về đặt tên biến mà tôi tự tổng hợp lại và thấy có ích trong quá trình code. Cảm ơn vì đã đọc. Một điều khác nhau đặc trưng giữa lập trình viên chuyên nghiệp và lập trình viên thông minh là lập trình viên chuyên nghiệp dành sức lực của họ để viết code cho mọi người dễ đọc.

Techtalk via huatrung