The Art of Readble Code (Part II)
Bài đăng này đã không được cập nhật trong 3 năm
Làm sao có thể viết code một cách dễ hiểu (Phần 2)
III. Đặt tên để không bị hiểu sai
-
Key Idea
: Ở bài trước tôi đã đề cập đến việc đặt tên cho dễ hiểu . và ở bài này khi bạn đặt tên biến hay luôn tâm niệm rằng liệu người khác khi đọc tên bạn đặt liệu có cách hiểu khác nào không . -
Ví dụ 1 :
filter()
Giả sử bạn đang viết code để thao tác 1 tập hợp các kết quả trả về của cơ sở dữ liệu Khi đọc hàm này liệu bạn có biết kết quả trả về như thế nào ?Trả về các Objects với year là <= 2011 hay các Objects với year không là <=2011 ? Vấn đề ở đây
filter
là 1 từ không rõ ràng. Nó là không rõ ràng liệu nó có nghĩa làđể chọn ra
hay làđể loại bỏ
. Tốt nhất là nên tránh những từ không rõ ràng như thế này để tránh bị hiểu nhầmGiải pháp: Nếu bạn muốn
chọn ra
các Objects với điều kiện trên thì nên đặt là làselect()
và ngược lại nếu bạn muốnloại bỏ
thì nên đặt tên làexclude()
. -
Ví dụ 2:
Clip
.Giả sử bạn có một function để bớt nội dung trong 1 đoạn văn Sẽ có 2 cách hiểu mà bạn có thể tưởng tượng ra function
Clip
sẽ làm gì:Loại bỏ một đoạn length từ cuối đoạn văn
hoặcsẽ cắt đoạn văn để độ dài maximum là length
.Cách kiểu thứ 2 có vẻ thông dụng hơn, nhưng bạn không bảo giờ có thể chắc chắn. Tốt hơn hết bạn nên đặt 1 cái tên tốt hơn như
Truncate
.Mặc dù tham số có tên length cũng không được tốt. Nếu nó có tên là
max_length
thì sẽ cũng làm cho nó dễ hiểu hơn.Nhưng đây vẫn chưa phải là kết thúc. Cái tên
max_lenth
vẫn để lại cho nhiều khúc mắc như :Số bytes tối đa
haysố lượng kí tự tối đa
haysố từ tối đa
. Do vậy có thể đặt lại làmax_chars
. -
Ví dụ 3: Sử dụng
min
vàmax
khi dùng các tên mang ý nghĩa giới hạn Ví dụ bạn có một web quản lý shop và cần dừng những người mua trên 10 sản phẩm một lần :Đoạn code trên có một lỗi cơ bản . Chúng ta có thể sửa nó 1 cách dễ dàng bởi thay đổi Hoặc thay đổi
CART_TOO_BIG_LIMIT
thành 11. Nhưng vấn để gốc làCART_TOO_BIG_LIMIT
là một biến khó hiểu . Nó không rõ ràng liệu ý của bạn làđến
hoặcđến và bao gồm
. => Lời khuyên : cách dễ hiểu nhất để đặt tên một giới hạn là thêmmax_
hoặcmin_
vào đầu của tên biến giới hạn. Trong trường hợp này chúng ta có thể đặt thànhMAX_ITEMS_IN_CART
. -
Ví dụ 4: Đặt tên biến logic Khi chúng ta đặt một tên cho một biến logic hoặc một function có giá trị trả về là một biến logic, hay đảm bảo rằng nó là dễ hiểu cái gì
true
vàfalse
Đây là một ví dụ nguy hiểm: Phụ thuộc vào việc bạn đọc nó như thế nào(không có ý nói giễu), Có 2 cách để hiểu :Chúng ta cần đọc cái password này
hoặcpassword đã được đọc
.Trong trường hợp này, tốt nhất là tránh từ
read
đổi thànhneed_password
hoặcuser_is_authenticated
.Nói chung, việc thêm các từ như
is
,has
,can
orshould
có thể làm cho các biến booleans thêm rõ ràng .Thêm một ví dụ một function có tên
SpaceLeft()
có vể như nó có thể trả về một số. Nếu nó nghĩa là trả về một giá trị booleans thì cái tên hay hơn làhasSpaceLeft()
.Cuối cùng, nên tránh đặt những cái tên mang ý nghĩa tiêu cực như
bool disable_ssl = false
thay vào đó làbool use_ssl = true
.
IV. Thẩm mỹ
1. Tại sao lại có vấn đề về thẩm mỹ
- Hãy tưởng tượng rằng bạn phải sử dụng class này :
- bạn sẽ phải dành nhiều thời gian hơn để hiểu nó nhưng nếu bạn đọc 1 phiên bản khác dễ đọc hơn thì mọi chuyện sẽ khác. Rõ ràng là sẽ dễ dàng làm việc hơn với những đoạn code có thẩm mỹ cao hơn. Nếu bạn nghĩ về việc này, hầu hết thời gian lập trình của bạn dành cho việc nhìn vào các đaoạn code. Cách nhanh nhất bạn có thể lướt qua code của bạn, cách dễ hơn để cho bất kì ai cũng có thể đọc code và hiểu code của bạn.
2. Sắp xếp lại các dấu xuống dòng để cho phù hợp và nhỏ gọn hơn
-
Giả sử bạn đang viết một đoạn Java code để đánh giá chương trình của bạn chạy như thế nào dưới các tốc độ internet khác nhau . Bạn có một
TcpConnectionSimulator
mà sẽ nhận 4 tham số trong khi khởi tạo:Tốc độ của kết nối (Kbps)
Độ trễ trung bình (ms)
Hiện tượng jitter của độ trễ (ms)
Số packet bị thất lạc (phần trăm )
Code của bạn cần 3 khởi tạo TcpConnectionSimulator
Ví dụ code này cần rất nhiều dấu xuống dòng để thỏa mãn giới hạn 80 kí tự mỗi dòng (đây là coding convention của khá nhiều công ty). Không may thay, nó làm phần định nghĩa của t3_fiber
trông khác so với những cái còn lại. Để đoạn code trên trở nên nhất quán tôi giới thiệu phương pháp tăng thêm dấu ngắt dòng như sau :
Đoạn code này có một môt hình phù hợp, rất dễ để có thể quét qua cả đoạn code. Nhưng không may là nó sử dụng rất nhiều dấu space
.
Có 1 cách ngắn gọn hơn để viết :
Tôi đã di chuyển các phần comments lên trên phía trên và đặt tất cả các tham số vào cùng một dòng. Mặc dù phần comment không ở gần mỗi dòng, nhưng nó làm cho trong như gắn gọn hơn rất nhiều .
3. Sử dụng cột liên kết
- Các cạnh và các cột một cách thẳng hàng sẽ dễ dàng hơn trong việc đọc qua văn bản .
- Đôi khi bạn có thể giới thiệu cột liên kết để làm code dễ dàng hơn để đọc. Ví dụ ở các phần trước , bạn có thể tạo khoảng trống và xếp hàng các đối số ví dụ : Có thể thành
Bạn cũng có thể viết với mảng để nhìn dễ hơn :
Tài liệu tham khảo : The Art of Readable Code by Dustin Boswell and Trevor Foucher
.
All rights reserved