Vài mẹo hữu ích khi đặt tên biến trong dự án của bạn
Đặt tên biến không hề dễ. Sau đây là vài mẹo để bạn khiến nó trở nên tốt hơn.
Bài viết này chứa một số quy tắc đặt tên cho các variables của bạn, phù hợp cho từng loại khác nhau. Variable name không chỉ mô tả tên của nó, mà còn có thể mô tả được chức năng cũng như kiểu biến. Điều này cực kỳ quan trọng cho các ngôn ngữ lập trình không cần xác định kiểu dữ liệu cho biến, nhưng nó cũng khá tốt cho các ngôn ngữ xác định kiểu, bởi bạn đã có thể mường tượng được kiểu dữ liệu khi nhìn vào tên biến.
Hãy cố gắng viết tên variables và functions của bạn như những bài văn xuôi rõ ràng, rành mạch, kể cả nó có dài hay không.
Chỉ có 2 điều khó khăn trong khoa học máy tính: xóa cache và đặt tên cho mọi thứ. - Phil Karlton
Đặt tên cho các số nguyên (Integer)
Có một số biến luôn luôn là số nguyên, ví dụ như age hoặc year. Ai cũng có thể hiểu được kiểu dữ liệu cho age và year là số, cụ thể là số nguyên. Cho nên bạn không cần làm gì với chúng, bản thân chúng đã tự nói cho bạn biết kiểu của nó là gì.
Một trong những trường hợp sử dụng kiểu số nguyên nhiều nhất là đếm số lượng của một thứ gì đó.
Bạn có thể tìm thấy được các loại biến kiểu như thế này trong bất cứ source code nào. Tôi hay sử dụng các quy ước đặt tên như sau cho các biến kiểu này: numberOfSomething
, somethingCount
...
Ví dụ: numberOfFailures
hoặc failureCount
.
Một số người thì hay đặt tên kiểu failures
, nhưng vấn đề ở đây là tên biến này không hề chỉ định rõ ràng ý nghĩa và kiểu của biến, điều đó khiến những người khác khi đọc vào đoạn mã này sẽ tốn thêm một chút thời gian để đọc hiểu. Theo ý kiến của tôi, biến failures
mang ý nghĩa chỉ định nó là một kiểu collection
(một array
hoặc list của failures
).
Nếu đơn vị của biến không rõ ràng, tôi luôn thêm một chút mô tả đơn vị của biến vào phía sau. Ví dụ, thay vì tooltipShowDelay
, tôi sẽ sử dụng tooltipShowDelayInMillis
hay thậm chí tooltipShowDelayInMillisecs
.
Đặt tên cho các kiểu số thập phân (Float)
Số thập phân không quá phổ biến như số nguyên, nhưng thỉnh thoảng bạn sẽ cần tới chúng cho một số giá trị đo lường không nên được làm tròn (ví dụ như giá cả - price, chiều cao - height, chiều rộng - width, trọng lượng - weight).
Khi cần sử dụng kiểu số thập phân, tôi thường đặt theo quy tắc somethingAmount
, hoặc amountOfSomething
. Bất cứ lúc nào tôi nhìn vào tên biến kiểu này, tôi có thể chắc chắn chúng là số thập phân.
Nếu đơn vị của biến không rõ ràng, tôi sẽ cần thêm mô tả vào cuối tên biến. Ví dụ như widthInCentimeters
, rainFallAmountInInchesPerHour
, angleInDegrees
, failurePercent
, failureRatio
.
Đặt tên cho kiểu dữ liệu đúng/sai (Boolean)
Kiểu dữ liệu boolean chỉ chấp nhận một trong hai giá trị: đúng (true) hoặc sai (false). Tôi thường áp dụng quy tắc isSomething
, hasSomething
, doesSomething
, didSomething
, shouldDoSomething
, willDoSomething
...
Một vài ví dụ cụ thể: isDisabled, hasErrors, allowsWhitespace, didUpdate, shouldUpdate, willUpdate.
Một biến boolean đúng đắn sẽ là câu trả lời cho câu hỏi dạng đúng sai (Yes/No question).
Đặt tên cho kiểu dữ liệu chuỗi (String)
Kiểu dữ liệu chuỗi là cực kỳ phổ biến, kể cả đối với các thực thể thực tế, ví dụ như tên - name, tiêu đề - title...
Đôi lúc tôi cần lưu trữ một kiểu dữ liệu số như là một chuỗi, tôi sẽ tuân theo quy ước sau: someValueString
hoặc là someValueAsString
. Đoạn code sẽ trở nên dễ đọc và dễ hiểu hơn nhiều.
Ví dụ:
//Javascript
const year = parseInt(yearAsString);
Mảng, danh sách, bộ dữ liệu (Array, Collection, Set)
Khi đặt tên cho những biến kiểu này, tôi luôn dùng danh từ số nhiều, ví dụ như customers
, errors
, tasks
,... Trong đa số trường hợp, điều này đủ, bởi bạn không cần biết rõ cách hiện thực khi chạy qua vòng lặp.
Trong một vài trường hợp khác, tôi có thể chỉ định cách hiện thực trong biến, ví dụ: queueOfTasks
, stackOfCards
, orderedSetOfTimestamps
..., nhưng tôi chưa bao giờ đặt tên biến kiểu customerList
, handledOperationSet
... Nó hết sức dư thừa và dài dòng khi chỉ cần đặt customers
, hoặc handledOperations
... là người ta đã hiểu rõ.
Biến mapping (hay key/value)
Biến mapping thường được sử dụng cho việc get giá trị (value) từ một từ khóa (key) cụ thể. Trong trường hợp này, tôi tuân theo nguyên tắc keyToValueMap
. Chằng hạn như chúng ta có một mapping value chứa tổng các đơn hàng của một khách hàng, chúng ta có thể đặt biến customerToOrderCountMap
.
Đặt tên theo cặp (Pair) và bộ (Tuple)
Trường hợp này khá đơn giản.
Tôi đặt tên biến cặp theo chuẩn variable1AndVariable2
, biến bộ theo chuẩn variable1Variable2Variable3AndVariableN
.
Ví dụ: heightAndWidth
, heightWidthAndDepth
...
Đặt tên cho các đối tượng (Object)
Các objects được xem như là một hiện thực của lớp (instance of class). Các class là một danh từ với ký tự đầu tiên được viết hoa, ví dụ như Person
, Account
, User
, Order
, Product
... Tên biến cần phải liên kết với tên class, ví dụ Person $person
, Account $account
, Order $order
... Bạn cũng có thể mô tả tính chất của biến bằng một tính từ đằng trước, ví dụ như Account $deletedAccounts
, Order $completedOrders
... Điểm mấu chốt ở đây là chúng ta cần giữ tên class cho phần cuối cùng của tên đối tượng.
Đặt tên cho các tham số của function
Phần này không khác với cách đặt tên ở những phần trên, nhưng bạn có thể thêm tiền tố "_" vào đằng trước của biến trong một số trường hợp.
//PHP
function getProductName (Product $product)
{
...
}
//SCSS
@function calculate-rem($_target, $_context: 16) {
@return ($_target / $_context) * 1rem;
}
Đặt tên cho các hằng số (Constant)
Các hằng số là một trường hợp đặc biệt. Tôi luôn luôn đặt tên hằng số theo chuẩn snake_case với toàn bộ các ký tự viết hoa.
Ví dụ: TOOLTIP_SHOW_DELAY_IN_MILLISECS
.
Các quy tắc chung
- Tránh viết tên biến tắt một cách tối nghĩa.
Cố gắng tránh viết tắt hết sức có thể. Tuy nhiên có rất nhiều tên viết tắt có thể sử dụng, ví dụ như Str
thay cho String
, Num
thay cho Number
, Prop
thay cho Property
... Các tên biến kiểu này khá phổ biến giữa các lập trình viên nên việc viết chúng hầu như không gây khó khăn cho người khác khi đọc. Nhưng bạn nên tránh việc viết tắt cho các trường hợp không phổ biến. Tôi hầu như chỉ viết tắt để tránh việc kéo dài lê thê tên biến của mình.
- Tránh những tên biến quá ngắn hoặc vô nghĩa.
Tên quá ngắn hầu như không thực sự chỉ rõ ý nghĩa của chúng. Tôi không sử dụng biến $i
hay $k
, thay vào đó tôi dùng $postIndex
hoặc $postKey
. Tôi hầu như không đặt các tên biến kiểu $num
, $tmp
, hay $val
... Tôi thích mô tả chúng rõ ràng hơn là đánh đố người khác như vậy.