Tên biến ngắn 1, 2 ký tự có sao không?
Dạo này Đạt học Go và Go có quan điểm về cách đặt tên biến thế này:
Variable Names
Variable names in Go should be short rather than long. This is especially true for local variables with limited scope. Prefer c
to lineCount
. Prefer i
to sliceIndex
.
The basic rule: the further from its declaration that a name is used, the more descriptive the name must be. For a method receiver, one or two letters is sufficient. Common variables such as loop indices and readers can be a single letter (i
, r
). More unusual things and global variables need more descriptive names.
Link: https://github.com/golang/go/wiki/CodeReviewComments#variable-names
Nói ngắn gọn, Go khuyến khích đặt tên ngắn thay cho tên dài. Đặc biệt là trong trường hợp tên biến có nằm trong scope nhỏ, hay nói đơn giản là trong hàm ngắn hoặc thời gian sống của biến ngắn.
Điều này đặc biệt đúng khi mình dùng biết i
thay cho index
trong for loop của nhiều ngôn ngữ
c++
for(int i = 0; i < n; i++) {
...
}
hay python
for i in xrange(n):
Hay go
for i := 0; i < n; i++ {
}
Trước đây thì Đạt phản đối cách này, tuy nhiên khi code go một thời gian và áp dụng kiểu đặt tên biến ngắn thì phát hiện ra là code của mình ngắn hơn nhiều. Vì muốn đặt tên biến ngắn mà vẫn có ý nghĩa cụ thể đúng thì hàm của mình phải ngắn, code phải rõ ràng.
Các bạn thử xem
Nhưng lưu ý là với biến toàn cục hoặc tên hàm thì phải dài và đầy đủ nghĩa tùy thuộc vào thời gian sống của biến (hoặc scope của biến)
Một điểm nữa là khi giải mấy bài algorithm thì hầu hết là mình dùng tên biến khá ngắn để giải cho nhanh. Code mấy bài này mà code dài thì thường không phải là code tốt nhất.
Ví dụ một bài classic twoSum thì chỉ cần thế này là đủ
Two Sum - LeetCode
Can you solve this problem?
Trong Clean Code có bàn về vụ này, nếu là biến có tên ngắn nhưng thông dụng trong lập trình, ví dụ như i trong vòng for, j trong nested for, hay biến local có scope ngắn thì không sao cả
Biến chạy là
i, j
thì huyền thoại rồiTrước giờ em tưởng có mỗi em dùng vậy thôi chứ Lúc em viết trên C++ thì thấy
Đối với nhiều hàm, ví dụ như hàm mang tính toán học (gcd, f(x) = …) thì việc đặt biến ngắn càng dễ hiểu, vì nó gần gũi với toán học.
Trong Go thì họ extreme hơn, chỉ cần ngắn, không nhất thiết phải là những biến thông dụng. Ví dụ
Ví dụ một đoạn code trong
coredns
( Đạt đang thử nghiệm cái coredns cho một project nên có đọc ít code)coredns/coredns/blob/18a77cd04557b810eba96a7239d39ee2d7a92157/plugin/kubernetes/setup.go#L40
Ở đây mình thấy những tên biến 1 ký tự khá thông dụng
c
cho*caddy.Controller
k
chokubernetesParse
(result)Mình for mảng 1 chiều dùng i hoặc idx.
Mảng 2 chiều không dùng i, j, k… mà dùng y,x hoặc cidx, ridx.
Còn biến thông thường độ dài <15.
Đấy cũng là practice mà Đạt làm theo trước đây, bây giờ đang thử cái practice 1, 2 ký tự này
Biến ngắn 1,2 ký tự mình vẫn dùng ở khu vực có scope nhỏ, ít biến , thời gian sống ngắn.
Nếu khu vực khác mà không có comment đi kèm sau này bảo trì mệt lắm
Em thì chỉ dùng tên biến ngắn cho cái nào là well-known hoặc là cho các biến mà ký hiệu của nó vốn là ngắn rồi (vd như trong toán, vector u, v, lớp w thì đơn giản là u, v, w).
Còn nếu đặt biến ngắn thì thường em ko hiểu ngay khi đọc lại code.
theo style này thì phải code sao cho thật rõ, thật obvious ấy.
Cái này hình như bên công nghệ thông tin của mình học của bên toán. Trước em có đọc đc 1 sách toán nào đó có quy định chia bảng chữ cái làm 3 phần. A,b, c… thì làm hằng số. I, j, k thì làm gì gì đó và x,y,z thì làm biến. Đại loại vậy
Đối với các biến mà làm index cho vòng lặp thì đặt ngắn. Hoặc scope ngắn thì đặt ngắn.
Khi ta tạo ra các
abstraction layer
thì từ đó gắn với mục đích thực tế ta nên đặt dài hơn để làm rõ các nghiệp vụ.e thấy việc dùng tên biến ngắn hay dài nó phụ thuộc vào nhiều yếu tố:
Code theo style ngắn này thường đc các thư viện implement hơn, vì nhiều thư viện cần có performance tốt nên họ optimize nhiều nhất có thể :v
Còn trong khi teamwork thì lúc viết code tốt hơn hết là cứ clear cho mọi người làm việc cùng nhau dễ dàng hơn.