Tôi tự hỏi liệu tôi có nên bảo vệ chống lại giá trị trả lại của một cuộc gọi phương thức hay không bằng cách xác nhận rằng chúng đáp ứng mong đợi của tôi ngay cả khi tôi biết rằng phương thức tôi đang gọi sẽ đáp ứng mong đợi đó.
ĐƯỢC
User getUser(Int id)
{
User temp = new User(id);
temp.setName("John");
return temp;
}
TÔI NÊN LÀM
void myMethod()
{
User user = getUser(1234);
System.out.println(user.getName());
}
HOẶC LÀ
void myMethod()
{
User user = getUser(1234);
// Validating
Preconditions.checkNotNull(user, "User can not be null.");
Preconditions.checkNotNull(user.getName(), "User's name can not be null.");
System.out.println(user.getName());
}
Tôi đang hỏi điều này ở cấp độ khái niệm. Nếu tôi biết hoạt động bên trong của phương thức tôi đang gọi. Hoặc bởi vì tôi đã viết nó hoặc tôi đã kiểm tra nó. Và logic của các giá trị có thể nó trả về đáp ứng các điều kiện tiên quyết của tôi. Là "tốt hơn" hay "phù hợp hơn" để bỏ qua xác nhận, hoặc tôi vẫn nên bảo vệ chống lại các giá trị sai trước khi tiếp tục với phương pháp tôi hiện đang thực hiện ngay cả khi nó luôn luôn vượt qua.
Kết luận của tôi từ tất cả các câu trả lời (cứ tự nhiên đến với bạn):
Khẳng định khi nào- Phương pháp này đã cho thấy hoạt động sai trong quá khứ
- Phương pháp này là từ một nguồn không đáng tin cậy
- Phương thức này được sử dụng từ những nơi khác và không nói rõ điều kiện hậu
- Phương pháp này gần với phương thức của bạn (xem câu trả lời được chọn để biết chi tiết)
- Phương thức xác định rõ ràng hợp đồng của nó với một cái gì đó như tài liệu phù hợp, loại an toàn, kiểm tra đơn vị hoặc kiểm tra sau điều kiện
- Hiệu suất là rất quan trọng (trong trường hợp đó, một chế độ gỡ lỗi khẳng định có thể hoạt động như một phương pháp lai)
Null
)? Có lẽ vấn đề không kém nếu tên đó ""
(không phải là null mà là chuỗi rỗng) hoặc "N/A"
. Hoặc bạn có thể tin tưởng vào kết quả, hoặc bạn phải bị hoang tưởng một cách thích hợp.