20. Tránh hàm dài. Tránh rẽ nhánh sâu.

Estimated reading: 4 minutes 237 views

Tóm tắt

Ngắn tốt hơn dài, phẳng tốt hơn sâu: Hàm quá dàicác khối lồng ghép quá sâu thường là kết quả của việc thất bại trong việc gắn một nhiệm vụ thích hợp cho một hàm (Mục 5). Cả hai vấn đề này thường đều phải giải quyết bằng cách refactor tốt hơn.

Thảo luận

Mỗi hàm phải thực hiện một công việc cụ thể và mang tên liên quan dễ hiểu (Mục 5Mục 70). Nếu một hàm kết hợp quá nhiều thao tác vào cùng một thân hàm dài, nó đang ôm đồm quá nhiều thứ cùng một lúc. Hàm quá dàicác khối lồng ghép quá sâu (ví dụ: if, for, while, try) là 2 thủ phạm chính khiến hàm khó hiểu và khó bảo trì, và thường là không cần thiết. Mỗi một khối lồng nhau đều làm bạn phải căng não ra để đọc hiểu mã code, vì bạn cần phải duy trì một “ngăn xếp” trong não bộ của mình để ghi nhớ (ví dụ: vào điều kiện nào, vào vòng lặp nào, vào try nào, …). Bạn đã bao giờ tìm thấy một dấu ngoặc nhọn “{” và tự hỏi dấu ngoặc nhọn nào là khớp với dấu “}” nào trong số rất nhiều khối if, for hoặc while,…chưa? Vì vậy hãy đầu tư thời gian để phân tích chức năng tốt hơn nhằm giúp người đọc (bao gồm bạn) tránh phải ghi nhớ quá nhiều ngữ cảnh nhất có thể tại một thời điểm.

Vì vậy hãy luôn hiểu biết và thực hành như sau: Giới hạn độ dài và độ sâu của các hàm. Tất cả các lời khuyên hữu ích sau đây cũng giúp giảm độ dài và các khối lồng nhau:

• Ưu tiên sự gắn kết: Một hàm một nhiệm vụ (Mục 5).
• Không lặp lại chính mình (DRY – Don’t Repeat Yourself): Ưu tiên một hàm được đặt tên hơn là các đoạn mã tương tự được lặp lại.
• Ưu tiên &&: Tránh các if lồng nhau khi điều kiện && có thể thực hiện được.
• Không try quá mức: Ưu tiên dọn dẹp tự động thông qua các hàm hủy hơn là các khối try (RAII – Mục 13).
• Ưu tiên các thuật toán hơn vòng lặp: Chúng “phẳng” hơn các vòng lặp thủ công và thường tốt hơn (Mục 84).
• Tránh switch, ưu tiên các hàm đa hình (Mục 90).

Ngoại lệ

Một hàm có thể dài và/hoặc sâu một cách hợp lý khi chức năng của nó không thể được tái cấu trúc thành các task phụ độc lập vì mỗi lần chia nhỏ đều cần truyền quá nhiều biến cục bộ, làm mã khó đọc hơn. Nhưng trong quá trình tái cấu trúc (refactor) nếu xuất hiện nhiều hàm con có các tham số giống nhau, có thể cần đưa chúng vào một class mới.

Tham khảo

[Piwowarski82] • [Miller56]

Link

Leave a Comment

Chia sẻ:

20. Tránh hàm dài. Tránh rẽ nhánh sâu.

Or copy link

CONTENTS