Đâu là nơi tốt nhất để xác nhận các tham số đầu vào của hàm: trong trình gọi hoặc trong chính hàm đó?
Khi tôi muốn cải thiện phong cách mã hóa của mình, tôi cố gắng tìm ra các thực tiễn tốt nhất hoặc một số quy tắc cho vấn đề này. Khi nào và cái gì tốt hơn.
Trong các dự án trước đây của tôi, chúng tôi thường kiểm tra và xử lý mọi tham số đầu vào bên trong hàm, (ví dụ nếu nó không phải là null). Bây giờ, tôi đã đọc ở đây trong một số câu trả lời và trong cuốn sách Lập trình viên thực dụng, rằng việc xác thực tham số đầu vào là trách nhiệm của người gọi.
Vì vậy, nó có nghĩa là, tôi nên xác nhận các tham số đầu vào trước khi gọi hàm. Ở mọi nơi chức năng được gọi. Và điều đó đặt ra một câu hỏi: không phải nó tạo ra một bản sao điều kiện kiểm tra ở mọi nơi mà hàm được gọi sao?
Tôi không quan tâm chỉ trong các điều kiện null, nhưng trong việc xác thực bất kỳ biến đầu vào nào (giá trị âm cho sqrt
hàm, chia cho 0, kết hợp sai giữa trạng thái và mã ZIP, hoặc bất cứ điều gì khác)
Có một số quy tắc làm thế nào để quyết định nơi kiểm tra điều kiện đầu vào?
Tôi đang suy nghĩ về một số đối số:
- khi việc xử lý biến không hợp lệ có thể thay đổi, sẽ tốt khi xác thực nó ở phía người gọi (ví dụ:
sqrt()
hàm - trong một số trường hợp tôi có thể muốn làm việc với số phức, vì vậy tôi xử lý điều kiện trong trình gọi) - Khi điều kiện kiểm tra giống nhau ở mọi người gọi, tốt hơn là kiểm tra nó bên trong chức năng, để tránh trùng lặp
- xác thực tham số đầu vào trong trình gọi chỉ diễn ra một trước khi gọi nhiều hàm với tham số này. Do đó, việc xác thực một tham số trong mỗi chức năng là không hiệu quả
- giải pháp đúng phụ thuộc vào trường hợp cụ thể
Tôi hy vọng câu hỏi này không trùng lặp với bất kỳ câu hỏi nào khác, tôi đã tìm kiếm vấn đề này và tôi đã tìm thấy những câu hỏi tương tự nhưng họ không đề cập chính xác trường hợp này.