Đặt tên biến như thế nào cho hiệu quả (part1)

( Sinh nhật diễn đàn rồi, viết bài kiếm ít like đi chơi xổ số nào :smile: )

Bài viết này mình xin chia sẻ một vài gợi ý về việc đặt tên biến sao cho hiệu quả :smile:

Cách đặt tên biến

Việc đặt tên biến khi làm bài tập nhỏ khá là đơn giản, thường là cứ int a,b,c,d,... ; là xong :smile: nhưng khi làm những bài tập phức tạp, hay một project nào đó mà cần lưu trữ, phát triển lâu dài thì phải rất chú ý việc đặt tên biến làm sao cho dễ hiểu, rõ ràng, đặc biệt là khi làm team hoặc chia sẻ code cho người khác thì càng phải trau chuốt, nếu không thì người đọc code của bạn sẽ như thế này :smile:

Phản ứng của người đọc code của bạn

###1. Một vài ví dụ về tên “đẹp”, tên “xấu”
Ta bắt đầu với 2 đoạn code như thế này:

x = x - xx;
xxx = aretha + SalesTax(aretha);
x = x + LateFee(x1, x) + xxx;
x = x + Interest(x1, x);

Và đây:

balance = balance - lastPayment;
monthlyTotal = NewPurchases + SalesTax ( newPurchases );
balance = balance + LateFee( customerID, balance ) + monthlyTotal;
balance = balance + Interest( customerID, balance );

Rõ ràng là code thứ 2 “đẹp” hơn nhiều so với code 1, code 1 mà là Ngọc Trinh thì code 2 chắc phải hơn Polla :joy:

"Đẹp" ở đây nghĩa là: tính dễ đọc (readable), tính dễ nhớ (memorable) và tính phù hợp (appropriate).

Điều quan trọng nhất khi đặt tên biến là phải làm sao để tên biến nó thể hiện được đầy đủ và chính xác cái mà nó nói đến vì như vậy người đọc code sẽ không bị lẫn với các thứ khác. Ví dụ một tên biến thế này:

numberOfPeopleOnTheUsOlympicTeam

Rõ ràng tên này đẹp hơn nhiều so với mấy cái tên kiểu a, b, c, number, x,… Chỉ có điều là hơi dài chút. (Vụ dài ngắn sẽ nói ở phần sau)

Bây giờ bạn thử chấm xem mấy em dưới đây em nào là hoa hậu em nào là thị nở nhá :smile:

  • Biến Ngày tháng hiện tại: currentDate, todaysDate vs. current, c, x, x1, x2, date
  • Biến Số dòng của trang: linesPerPage vs. lpp, lines, l, x, x1, x2
  • Biến Vận tốc của một đoàn tàu cao tốc: trainVelocity, velocityInMph vs. velt, v, tv, x, x1, x2, train

Tên biến bên trái nêu rõ được cái mà nó muốn nói đến, còn bên phải thì nó quá mơ hồ, không cụ thể, dùng mấy tên như vậy thì chắc code lâu lâu không động vào là chẳng hiểu biến này là biến gì luôn :smile:

###2. Hãy hướng vào Vấn Đề cần nói đến chứ đừng hướng vào Giải Pháp (Problem-Orientation)

Nói cách khác là hãy trả lời câu hỏi What chứ đừng trả lời câu hỏi How

Ví dụ:

inputRecord vs. employeeData 
bitFlag vs. printerReady
calcVal vs. sum

inputRecord là nói về cách chúng ta lấy thông tin (How), còn employeeData mới là cái chúng ta muốn nói đến (What). Tương tự bitFlag là công cụ để ta xác định printer đã Ready chưa, còn printerReady mới là cái ta cần nói đến. Sum là cái cần nói đến còn calcVal là nói về cách tính sum.

###3. Tên biến dài tầm nào thì được?

Quay lại với ví dụ vừa nãy:

numberOfPeopleOnTheUsOlympicTeam

Tên này thì quá là rõ ràng, đầy đủ, không thể nào nhầm với biến khác được, nhưng có cái là nó hơi dài, cho vào code sẽ làm rối code. Người ta thống kê được là những chương trình có độ dài trung bình các tên biến tầm khoảng từ 8 - 20 (tức là khoảng 2 - 5 từ) thì dễ debug hơn. Tất nhiên thống kê này không có nghĩa là biến nào cũng phải như vậy, mà nó nhắc chúng ta nhớ đến việc phải đặt tên biến sao cho nó có độ dài hợp lý.

Với biến trên thì ta có thể viết là: numTeamMembers, teamMemberCount,… nhưng tuyệt đối đừng đặt tên kiểu n, ntm, tmc,…

… Mỏi tay quá… To Be Continued :smile:


Bài viết dựa trên cuốn Code Complete của Steve C.McConnell


Đọc thêm: Những bài viết về code sao cho đẹp
http://daynhauhoc.com/tags/coding-style

12 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?