Quy tắc đặt tên biến và hàm rõ nghĩa để code tự giải thích

  • author-image

    Nguyễn Đình Cường

  • blog-tag
  • blog-comment 0 comment
  • created-date 09 Nov, 2026
blog-thumbnail

Đặt tên là việc lập trình viên làm nhiều nhất mỗi ngày, nhưng lại hay bị xem nhẹ nhất. Một cái tên tốt giúp bạn và đồng đội đọc code nhanh gấp nhiều lần mà không cần comment. Bài này tổng hợp những quy tắc đặt tên thực dụng, áp dụng được cho mọi ngôn ngữ.

Tên phải trả lời được câu hỏi "nó là gì" hoặc "nó làm gì"

Hãy so sánh hai đoạn code sau:

// Khó hiểuconst d = 7;function calc(a, b) { return a * b * d; }// Rõ ràngconst DAYS_IN_WEEK = 7;function calculateWeeklyIncome(hourlyRate, hoursPerDay) {return hourlyRate * hoursPerDay * DAYS_IN_WEEK;}

Chỉ cần đọc tên, bạn đã biết mục đích mà không phải lần theo logic. Nếu bạn phải viết comment để giải thích một tên biến, rất có thể tên đó cần được đổi.

Dùng danh từ cho biến, động từ cho hàm

  • Biến và thuộc tính là danh từ: userList, totalPrice, selectedOrder.
  • Hàm và phương thức là động từ hoặc cụm động từ: fetchUser, sendEmail, calculateTax.
  • Biến boolean nên bắt đầu bằng is, has, can, should: isActive, hasPermission, canEdit.
  • Class là danh từ viết hoa chữ đầu: OrderService, PaymentGateway.

Tránh đặt boolean kiểu phủ định như isNotVisible, vì điều kiện if (!isNotVisible) rất dễ gây nhầm. Hãy dùng isVisible và phủ định khi cần.

Tránh viết tắt khó đoán và tên quá chung chung

Những tên như data, info, temp, obj, list1 gần như không mang thông tin. Hãy thay bằng tên cụ thể: invoiceData thành invoice, list1 thành pendingOrders.

Viết tắt chỉ nên dùng khi nó là chuẩn phổ biến như id, url, html, api. Còn usrMgr hay cnt thì nên viết đầy đủ. Màn hình hiện nay đủ rộng, không cần tiết kiệm vài ký tự.

Với biến lặp ngắn như i, j trong vòng lặp nhỏ thì vẫn chấp nhận được. Nhưng nếu vòng lặp dài hơn vài dòng, hãy dùng tên có nghĩa như rowIndex, student.

Thống nhất quy ước theo ngôn ngữ và dự án

KiểuVí dụThường dùng trong
camelCaseuserNameJavaScript, Java, C# (biến, hàm)
PascalCaseUserProfileTên class ở hầu hết ngôn ngữ
snake_caseuser_namePython, Ruby, tên cột database
UPPER_SNAKE_CASEMAX_RETRYHằng số
kebab-caseuser-profileTên file, CSS class, URL

Quan trọng nhất là nhất quán. Nếu dự án đã dùng getUser thì đừng thêm fetchCustomer và retrieveOrder cho cùng một loại hành động. Chọn một từ cho mỗi khái niệm (get, fetch hay load) rồi dùng xuyên suốt.

Độ dài tên tỷ lệ với phạm vi sử dụng

Biến chỉ sống trong 3 dòng có thể đặt tên ngắn. Biến global, tên hàm public hay tên class cần dài và đầy đủ hơn vì nó được đọc ở nhiều chỗ, nơi người đọc không có ngữ cảnh. Ví dụ, user là đủ trong một hàm nhỏ xử lý người dùng, nhưng cấu hình toàn cục nên là defaultUserSessionTimeoutMinutes thay vì timeout.

Cũng đừng đi quá xa: theListOfAllActiveUsersFromDatabase là thừa. Hãy dừng ở mức đọc lên không bị mỏi: activeUsers.

Kiểm tra nhanh trước khi chốt tên

  1. Người mới vào dự án có đoán được tên này dùng để làm gì không?
  2. Tên có phát âm và tìm kiếm (Ctrl+F) được dễ dàng không?
  3. Có tên nào khác trong dự án nói về cùng khái niệm không? Nếu có, dùng lại.
  4. Tên có nói dối không? Ví dụ userList nhưng thực chất là một object, hoặc getUser mà lại âm thầm xóa dữ liệu.

Nếu không đặt được tên hay cho một hàm, đó thường là dấu hiệu hàm đang làm quá nhiều việc. Hãy thử tách nó ra, tên sẽ tự xuất hiện.

Kết luận

Đặt tên tốt là kỹ năng rẻ nhất để nâng chất lượng code: không cần công cụ, không cần học framework mới. Hãy dành thêm 30 giây cho mỗi cái tên, bạn trong tương lai (và đồng đội) sẽ cảm ơn bạn. Đừng ngại đổi tên khi hiểu bài toán rõ hơn, vì các IDE hiện đại hỗ trợ đổi tên an toàn chỉ bằng một phím tắt.

Muốn luyện thói quen viết code sạch qua bài tập thực tế, bạn có thể xem các khóa học lập trình trên codebem.com và áp dụng ngay những quy tắc này vào dự án của mình.

author_photo
Nguyễn Đình Cường

0 comment