Đưa câu lệnh điều kiện lên phía gọi hàm
- Nếu có câu lệnh điều kiện
if bên trong hàm, hãy cân nhắc chuyển nó lên phía caller.
- Thay vì để hàm tự kiểm tra điều kiện tiên quyết ở bên trong và “không làm gì cả” khi điều kiện không được đáp ứng, hãy để caller kiểm tra điều kiện tiên quyết để có thể đảm bảo qua kiểu dữ liệu rằng điều kiện đó đã được thỏa mãn.
- Việc đặc biệt “đưa điều kiện tiên quyết lên trên” có thể giúp giảm số lần kiểm tra nói chung, và đây là một trong những động cơ của quy tắc này.
Đẩy vòng lặp xuống dưới
- Đây là một quy tắc xuất phát từ tư duy hướng dữ liệu: đưa vào khái niệm “batch” của đối tượng, lấy thao tác theo lô làm trường hợp cơ bản, và xem phiên bản vô hướng là trường hợp đặc biệt của phiên bản theo lô.
- Lợi ích chính là cải thiện hiệu năng, vì có thể phân tán chi phí khởi động và có được sự linh hoạt trong thứ tự xử lý.
- Ví dụ, trong phép nhân đa thức dựa trên FFT, việc đánh giá đa thức tại nhiều điểm cùng lúc có thể nhanh hơn so với đánh giá riêng lẻ.
Ý kiến của GN⁺
- Điều quan trọng nhất trong bài viết này là hai quy tắc lập trình nhằm cải thiện hiệu năng và độ rõ ràng của mã trong phát triển phần mềm: “đưa câu lệnh điều kiện lên trên” và “đẩy vòng lặp xuống dưới”.
- Những quy tắc này giúp tăng khả năng đọc hiểu mã, tối ưu hiệu năng và giảm khả năng phát sinh lỗi.
- Bài viết này thú vị và hữu ích với nhiều lập trình viên vì nó mang lại góc nhìn về cách quản lý sự phức tạp trong kỹ nghệ phần mềm và viết mã hiệu quả hơn.
1 bình luận
Ý kiến Hacker News
ifvàfor.forcó thể rút thời gian chạy mô phỏng từ 1 tuần xuống còn 1 giờ. Những người có nền tảng như vậy sẽ tối ưu thứ tự củaforvàiftheo bản năng.iflên trên là làm cho các điều kiện tiền đề và hậu điều kiện của hàm không còn nhìn thấy trực tiếp trong định nghĩa hàm. Trong các dự án lớn, những hàm như vậy có thể bị tái sử dụng ngoài ngữ cảnh dự định và gây lỗi. Dùng framework hợp đồng có thể là một cách giải quyết, nhưng khi đó phải viết điều kiện hai lần, cả trong hợp đồng lẫn trong mã.ifnên nằm ở đầu hàm chứ không phải cuối hàm, và lỗi cần được truyền đi đúng cách.forvà câu lệnhifđều là các phép điều khiển luồng, nên một số lập luận trong bài có vẻ vô nghĩa. Lập luận về hiệu năng là mạnh nhất, nhưng với vai trò là mối lo đối với lời khuyên chung thì nên được xem xét sau cùng.iflên trên khi điều kiện thường phụ thuộc vàowalrus.iftiền đề lên phía caller là một ý tưởng khủng khiếp. Trong một số trường hợp đặc biệt thì có thể là ý hay, nhưng nhìn chung thì không nên làm vậy. Trong thư viện, nên kiểm tra điều kiện tiền đề ở ranh giới bên ngoài để phần triển khai bên trong có thể tiếp tục mà không cần các giả định nội bộ. Việc phụ thuộc vào caller để kiểm tra sẽ làm mất đi mục đích đó.