30/09/2018, 16:26
25 dòng code cho mỗi hàm có quá ngắn?
Trong lập trình, hàm viết càng nhỏ càng tốt, càng ít logic càng tốt. Vẫn theo quy tắc cũ 80 cột / 25 hàng tối đa cho một hàm.
25 hàng thì ít quá @laptrinhio ơi
Bài liên quan
Rule 80/25 đó. Thi vô Google,MS, Apple, Symantec…code ko đc thế này là teo ngay đó
Em thấy code kernel có nhiều hàm hơn 25 dòng lắm anh ơi. Ví dụ như hàm đầu tiên của kernel
start_kernel
cũng 186 dòng tính cả blank line + comments. Bỏ hết blank line + comments đi chắc giảm được nhiều nhưng chắc chắn là hơn 25 dòng rồi.torvalds/linux/blob/master/init/main.c#L502-L688
This file has been truncated. show originalTheo “Code Complete 2nd” thì cỡ 200 dòng đổ lại là được.
McConnell, Steve (2004-06-09). Code Complete (2nd Edition) (Developer Best Practices) (Kindle Locations 4487-4495). Pearson Education. Kindle Edition.
Đọc kĩ nhé. complex algorithm.
Yeah, đúng rồi anh. Nhưng một hàm có thể trở nên phức tạp. Vì thế 25 dòng là quá ngắn, như anh nói ở trên
P/S: Thực ra hàm
start_kernel
cũng không phải là thuật toán phức tạp, chỉ có điều là khởi tạo nhiều thứ quá. Hầu hết các hàm này đều làinit
.Chưa thấy xác nhận là hàm start_kernel là hàm đang được code tốt. Về bản chất hàm này có thể tách ra được nữa.
Ghi chú thêm: hàm này sử dụng Template Method Design Pattern.
Những gì đã là nguyên lý cơ bản hay Good/Best Practices thì cứ cố gắng theo vậy mà làm. Càng gần tới thì càng tốt chứ không phải là dập khuôn.
80 cột 25 hàng bằng với kích thước của màn hình console (khi thu nhỏ)
cái này màn hình khi code Pascal chăng?
e vừa test:
25 dòng, 80 số / dòng.
Đây là một quy tắc cũ, nhưng rất chất lượng đấy Làm theo đi sẽ thấy code của mình tốt hơn nhiều.
@laptrinhio Đồng ý với anh. Theo em đọc trong Code Complete thì hàm init là một ngoại lệ. Trước đây em không biết luật 25 dòng, nhưng em thông thường code cũng trong vòng 25 dòng thôi.
25 dòng ở đây là không tính comments, blank line.
Theo mình nhớ đây là chuẩn của IBM về coding style ngày trước. Còn bây giờ thì có nhiều chuẩn mới rồi tùy ngôn ngữ. Cái này thì các IDE cũng đều hỗ trợ để người dùng dễ nhìn(dòng kẻ đỏ dọc) thấy mình đang làm đúng hay sai. Nó giúp người viết phải phân tách các requirements ra thành các business riêng biệt nhằm dễ dàng cho việc dùng lại cũng như thực hiện unit test các functions. Nói chung làm theo được là tốt nhất.
25 dòng là dài. Thầy mình dạy, trong lập trình có quy tắc DON’T REPEAT YOURSELF, và mỗi hàm tối đa nên 10 dòng. Ban đầu cũng cảm thấy lạ, nhưng khi thầy đưa một số mã nguồn mà thầy viết thì khá bất ngờ, code rất đẹp và đúng là ko có hàm nào quá 10 dòng.
10 dòng thì khắc khe quá không nhỉ
Nên chứ không phải tối đa, không thể khuôn phép trong 25 dòng, từ thuộc vào từng hàm và tính chi tiết của hàm đó
Bạn có thế nói thêm về qui tắc đó không? minh search đọc ko hiểu cho lắm
Nghe tới 25 dòng có lẽ là ngắn, nhưng thực ra nếu kiểm tra lại code của chính mình, các bạn sẽ thấy hầu hết các hàm của mình rất ngắn.
P/S: Đấy là đối với người đã đi làm hoặc là code nhiều rồi nhé
Đơn giản chỉ là code mỗi hàm <= 10 dòng. Chỉ cần có sự xuất hiện >= 2 đoạn code ngắn tương tự nhau thì cho nó vào 1 hàm mới
@ltd Dạ, e chỉ được dạy như vậy thôi, ban đầu e cũng thấy khó để làm như vậy. Nhưng nhìn code của thầy thì có vẻ là hợp lí. Nhưng hiện tại e chưa làm được điều đó, nhiều đoạn code nếu tách ra quá ngắn cũng rắc rối mà khó sửa
Nên tách theo “logic” của việc tính toán chứ không nên tách để nó “ngắn” hơn. Ví dụ 3-4 dòng code làm một nhiệm vụ riêng thì có thể tách ra làm một hàm. Không cần thiết code đó lặp lại hoặc ngắn tương tự nhau.
Nếu em có vấn đề về việc tách hàm, khi nào nên tách thì em có thể tạo topic để thảo luận có nên tách không? Nếu có, tách như thế nào?
Vậy hàm có nhiều chức năng thì sao ?
Mình có xem nhiều mã (được viết bởi cá dev chuyên nghiệp cũng không thấy theo quy tắc này
Thì tách ra thành nhiều hàm con để giải quyết.
Chắc là chưa đủ chuyên nghiệp rồi. Hì, đùa thôi chứ mình thấy nhiều code dài lắm, rất khó đọc, khó hiểu, khó fix bug dễ tạo bugs. Ví dụ có những hàm lên 1000+ dòng đọc cực kỳ đau mắt.
Have you written very long functions? If so, why?
Bên em tiêu chuẩn 1 funtion tối đa là 1 trang giấy A4. Có lúc ngươi ta in code ra giấy để review.