Một cái tên tốt nói rõ thứ đó là gì hoặc làm gì, dùng đúng từ mà người làm nghiệp vụ dùng, đủ dài để không ai phải đoán, và nhất quán trong cả dự án. Còn khi bạn thấy rất khó đặt tên cho một thứ, đó thường là dấu hiệu đoạn mã đang làm quá nhiều việc, hoặc bạn chưa thật sự hiểu nó.
Chào bạn, đây là Nhà Lập Trình. Trong nghề có câu nói đùa rằng đặt tên là một trong hai việc khó nhất của lập trình. Nghe thì như đùa, nhưng ai làm lâu cũng thấy đúng. Một dự án có tên tốt đọc như đọc văn. Một dự án có tên tệ đọc như giải mật mã. Tập này mình kể cách đặt tên cho người sau hiểu.
Vì sao tên lại quan trọng đến vậy?
Mã được viết một lần, nhưng được đọc hàng trăm lần. Mỗi lần ai đó sửa lỗi, thêm tính năng, xem lại mã, họ phải đọc. Và thứ họ đọc nhiều nhất chính là tên: tên biến, tên hàm, tên tệp, tên bảng.
Một cái tên tồi buộc người đọc phải dừng lại, đoán, đi xem định nghĩa, rồi quay lại. Một biến tên là d có thể là ngày, là dữ liệu, là khoảng cách, là số tiền giảm. Người đọc không biết, phải đi tìm. Nhân lên với hàng nghìn biến trong dự án, đó là hàng giờ mỗi tuần bị lãng phí.
Tệ hơn, một cái tên sai còn đánh lừa. Biến tên là danh sách khách hàng nhưng thực ra chỉ chứa khách đang hoạt động. Hàm tên là lấy đơn hàng nhưng thực ra còn cập nhật trạng thái đơn. Người đọc tin cái tên, và viết mã dựa trên niềm tin sai.
Tên là tài liệu đầu tiên và gần mã nhất. Nó luôn đi cùng mã, không bao giờ bị bỏ quên như tài liệu riêng.
Tên nói về ý định, không về cách làm
Một cái tên tốt trả lời câu hỏi: thứ này để làm gì. Không phải: thứ này được làm bằng cách nào. Biến chứa số ngày từ lúc đặt hàng tới hôm nay nên được đặt theo ý nghĩa đó, như số ngày chờ giao, chứ không phải theo cách tính, như hiệu hai ngày.
Với hàm, tên thường bắt đầu bằng một động từ cho biết nó làm gì: tính tổng tiền, gửi thư xác nhận, kiểm tra tồn kho. Nếu tên hàm cần chữ và, như tính tiền và gửi thư, đó là dấu hiệu hàm làm hai việc, nên tách ra.
Với giá trị đúng sai, tên nên đọc lên như một câu hỏi có câu trả lời có hoặc không: đã thanh toán, còn hàng, là quản trị viên. Tránh những tên phủ định như chưa không hoạt động, vì người đọc phải lật đi lật lại trong đầu.
Độ dài tên nên tương xứng với phạm vi sống của nó. Một biến đếm trong vòng lặp ba dòng có thể tên ngắn. Một biến dùng khắp cả tệp cần tên đầy đủ, rõ nghĩa.
Dùng từ của nghiệp vụ
Một lỗi phổ biến là lập trình viên tự đặt ra từ ngữ riêng cho những thứ mà người làm nghiệp vụ đã có tên. Kế toán gọi là phiếu thu, lập trình viên gọi là giao dịch vào. Kho gọi là phiếu nhập, lập trình viên gọi là bản ghi hàng về.
Khi hai bên dùng hai bộ từ khác nhau, mọi cuộc trao đổi đều cần dịch. Chị kế toán báo lỗi ở phiếu thu, lập trình viên phải nghĩ xem phiếu thu trong mã tên là gì. Người mới vào đội phải học hai bộ từ.
Hãy dùng đúng từ mà người dùng và người làm nghiệp vụ dùng. Nếu chưa biết, hãy hỏi. Nếu các phòng ban dùng những từ khác nhau cho cùng một thứ, hãy thống nhất một từ và ghi lại trong một bảng thuật ngữ nhỏ của dự án.
Chuyện tiếng Việt hay tiếng Anh cũng nên được quyết từ đầu. Nhiều đội Việt đặt tên bằng tiếng Anh vì từ khoá ngôn ngữ là tiếng Anh, nhưng với những khái niệm rất riêng của Việt Nam, dịch sang tiếng Anh có khi lại gây khó hiểu. Không có đáp án đúng tuyệt đối, chỉ cần cả đội thống nhất và nhất quán.
Nhất quán quan trọng hơn hoàn hảo
Trong một dự án, cùng một khái niệm nên luôn có cùng một tên. Nếu nơi này gọi là khách hàng, nơi kia gọi là người mua, nơi nọ gọi là người dùng, người đọc sẽ tự hỏi đây là ba thứ khác nhau hay là một.
Cùng một loại hành động cũng nên dùng cùng một động từ. Nếu hàm lấy dữ liệu từ cơ sở dữ liệu ở chỗ này gọi là lấy, chỗ kia gọi là tải, chỗ nọ gọi là đọc, người đọc sẽ nghĩ có sự khác biệt nào đó giữa ba cách.
Khi vào một dự án có sẵn, hãy theo quy ước của dự án đó dù bạn không thích. Một dự án có quy ước hơi dở nhưng nhất quán dễ đọc hơn một dự án có ba quy ước tốt trộn lẫn.
Nếu muốn đổi quy ước, hãy bàn với đội và đổi cho cả dự án, hoặc ít nhất cho cả một khu vực. Đừng đổi lẻ tẻ từng chỗ mình chạm vào.
Khi khó đặt tên là lúc nên dừng lại
Có những lúc bạn ngồi mãi không nghĩ ra tên cho một hàm. Tên nào cũng không đúng hẳn. Đó không phải lỗi của vốn từ. Thường đó là dấu hiệu hàm đang làm nhiều việc không liên quan, nên không có tên nào bao trọn được. Hãy thử tách nó ra, bạn sẽ thấy mỗi phần có tên rất dễ.
Hoặc đó là dấu hiệu bạn chưa hiểu rõ mình đang làm gì. Khi hiểu rõ, tên đến tự nhiên. Khi còn mù mờ, tên cũng mù mờ theo, kiểu xử lý dữ liệu, quản lý thông tin, những tên nói gì cũng đúng mà thực ra chẳng nói gì.
Đừng sợ đổi tên. Các trình soạn thảo hiện nay có chức năng đổi tên an toàn, tự cập nhật mọi chỗ dùng. Khi hiểu thêm về một thứ, hãy đổi tên nó cho đúng hơn. Tên không phải khắc trên đá.
Một anh trưởng nhóm ở Đà Nẵng có thói quen khi xem lại mã, câu hỏi đầu tiên anh hỏi không phải mã có chạy không, mà là tên này có nói đúng thứ nó làm không. Anh bảo tên đúng thì mã thường đúng, tên sai thì mã hay có vấn đề.
Câu hỏi thường gặp
Nên đặt tên biến bằng tiếng Việt hay tiếng Anh?
Không có đáp án tuyệt đối. Nhiều đội dùng tiếng Anh cho thống nhất với từ khoá ngôn ngữ, nhưng khái niệm rất riêng của Việt Nam có thể rõ hơn khi dùng tiếng Việt không dấu. Quan trọng nhất là cả đội thống nhất và nhất quán.
Tên biến dài có làm mã chậm đi không?
Không. Độ dài tên không ảnh hưởng tới tốc độ chạy của chương trình trong hầu hết ngôn ngữ phổ biến. Tên dài rõ nghĩa chỉ tốn thêm vài phím gõ, còn tiết kiệm rất nhiều thời gian đọc.
Có nên dùng chữ viết tắt trong tên biến?
Chỉ dùng những chữ viết tắt rất phổ biến mà ai trong ngành cũng hiểu. Tránh tự chế chữ viết tắt riêng, vì người đọc sau sẽ phải đoán.
Làm sao đổi tên biến mà không làm hỏng chương trình?
Dùng chức năng đổi tên có sẵn trong trình soạn thảo, nó sẽ cập nhật mọi chỗ sử dụng. Sau đó chạy thử nghiệm để chắc không có chỗ nào bị bỏ sót, như tên được ghép động trong chuỗi.
Vì sao đặt tên được coi là việc khó trong lập trình?
Vì một cái tên tốt đòi hỏi bạn hiểu rõ thứ mình đang làm, biết từ ngữ của nghiệp vụ và dự đoán được người đọc sau sẽ hiểu thế nào. Khó đặt tên thường phản ánh thiết kế chưa rõ.