Vì vậy, tôi thấy bản thân mình đang làm một việc gì đó giống như mô hình sau đây. Thay vì:mẫu java: khi nào có ý nghĩa khi sử dụng các biến tạm thời
if (map.containsKey(someKey)) {
Value someValue = map.get(someKey);
...
}
Để không đi qua bản đồ hai lần (và kể từ khi tôi biết bản đồ của tôi không lưu trữ null), tôi sẽ thực hiện:
Value someValue = map.get(someKey);
if (someValue != null) {
...
}
Điều này dường như tôi trở thành một giá trị mô hình cho rằng các hoạt động Map
thực hiện một số lượng phong nha của các hoạt động và tối ưu hóa, tôi giả định, không đủ thông minh để tối ưu hóa nó đi.
Nhưng sau đó tôi thấy mình đang làm các mẫu tương tự trong các tình huống khác. Ví dụ: tôi có nên lưu trữ kết quả someMethod()
trong biến tạm thời thay vì thực hiện cuộc gọi hai lần không? Rõ ràng tôi không thể gọi số someMethod()
hai lần nếu có phản ứng phụ nhưng khi nào nó có ý nghĩa khi chỉ gọi nó một lần từ quan điểm tối ưu hóa?
if (someObject.someMethod() != null) {
processSomehow(someObject.someMethod());
}
Tôi biết biên giới này về câu hỏi "không mang tính xây dựng" nên tôi đang tìm câu trả lời trình bày một số thông tin và tham khảo thay vì phỏng đoán.
- Khi nào có ý nghĩa khi thực hiện việc này và khi nào?
- Làm cách nào để đánh giá "chi phí" của
someMethod()
để xác định thời điểm sử dụng biến tạm thời? - Đối với các phương pháp đơn giản như nhận các phương pháp, điều này có thể cản trở trình biên dịch hotspot hoặc trình tối ưu hóa và thực sự tạo ra mã ít hiệu quả hơn không?
Vì hậu thế, tôi không hỏi "làm cách nào tôi có thể cải thiện tốc độ của chương trình hiện tại". Tôi đang cố gắng tìm ra "Tôi nên sử dụng mẫu nào khi viết mã trong tương lai".
Cảm ơn mọi thông tin.
Tôi nghĩ câu trả lời cho tất cả các câu hỏi này liên quan đến từ "profiler" ... –
Rõ ràng nếu 'someMethod()' là tốn kém hoặc có tác dụng phụ bạn không muốn gọi nó hai lần. Java không (chưa) chứa một từ khóa 'idempotent' (mang lại những ký ức cũ về' reducible' trong PL/1 :-) –
Điểm tốt @Jim. Tôi đã chỉnh sửa câu hỏi của mình để làm rõ hơn rằng tôi không nói về tác dụng phụ. Nhưng những gì tôi đang nói đến là làm thế nào để đánh giá "chi phí" của phương pháp. – Gray