Trước khi vào vấn đề chính mình có đặt cho các bạn một vài câu hỏi.
- Đã bao giờ các bạn viết code luôn nhận thức phải viết code sạch bao giờ chưa?
- Đã bao giờ bạn gặp cảm giác đọc một đoạn code của ai mà rất khó chịu chưa?
Mình thì từ trước đến nay cũng ít khi quan tâm đến việc Code bẩn hay sạch cả vì toàn code của mình viết và mình đọc, mình hiểu được cái flow của nó nên chả quan tâm tới mấy việc đó.
Cơ mà trời nắng sẽ có ngày đen, hôm nay mình có nhận được 1 task được giao…Thề! Lần đầu tiên gặp đoạn code phải gọi là khắm của khắm. Một số dòng trong đoạn code như này nè:
def scraper(phase ):
global conn, driver, proxyStart, actProxy, instance, useProxy, VPSID
global currDb, pgCnt, wasHeadlessChange, prevspeed, tmBrw, stAll
global tmReconnect, connDb
Đây là một lỗi theo mình thấy là quá lạm dụng việc khai báo các biến global. Các biến global này khi khai báo sẽ nằm trên vùng nhớ stack và chỉ được huỷ khi chương trình thực thi kết thúc. Với một chương trình nhỏ thì việc khai báo vùng nhớ để thời gian time to live(TTL) đến hết chương trình thì oke, tuy nhiên nếu đoạn code mà chứa kiểu list, set hay dict mà cỡ vài ngàn element thì performace hệ thống sẽ giảm đáng kể, có thể bị tràn stack.
Một vấn đề nữa khi khai báo các biến global này sẽ khiến cho việc theo dõi các biến cực kì khó khăn(mình đã gặp). Bạn thử tưởng tượng biến global a được khai báo ở line 1, mà tới line 1000 hơn kéo lên coi lại (chắc chỉ có phát khùng).
Và đây là một lỗi nữa
if len( sys.argv ) > 1:
time.sleep( 60 )
os.chdir( gp() )
#init UAs; CR:: not used
f = open( "UAs.txt", "r" )
UAs = eval( f.read() )
f.close()
Lỗi này là viết tắt, các biến nên đặt tên có tính gợi nhớ không nên viết tắt các chữ cái như i, x, a... Đưa ông nào khác đọc mà cứ x với a người ta cọc người ta đánh tui không can.
Còn một vấn đề khá quen thuộc nữa mà mình thấy nhiều ban sinh viên mới học lập trình mắc phải đó là code linh tinh, xuống dòng, thụt lề không chuẩn gây khó nhìn và rối mắt, cách đơn giản nhất là chọn cho mình một IDE chuẩn và thông minh sẽ giúp code bạn đỡ xấu hơn. Nếu bạn muốn code của mình sạch hơn nữa thì có thể tham khảo thêm nguyên lí SOLID.
Một số kinh nghiệm viết clean code các bạn nên học theo:
- Cái trước tiên là phải dễ đọc, dể hiểu, và dễ sửa chữa, nên tuân theo một nguyên tắc nhất định. Chứ viết rõ ràng lúc style này lúc style kia cũng không ổn lắm.
- Không có phần trùng lặp về chức năng. Nên viết thành các module, function.
- Phải có performace tốt, logic và rõ ràng.
Viết code như viết văn vậy :)
- Chạy tốt các tests, và đảm bảo nó hoạt động nhé