Phạm vi của các biến cục bộ phải luôn nhỏ nhất có thể.
Trong ví dụ của bạn tôi đoán str
là không sử dụng bên ngoài của while
vòng lặp, nếu không bạn sẽ không được đặt câu hỏi, vì tuyên bố nó bên trong while
vòng lặp sẽ không là một lựa chọn, vì nó sẽ không biên dịch.
Vì vậy, kể từ khi str
được không sử dụng bên ngoài vòng lặp, phạm vi nhỏ nhất có thể cho str
là trong các vòng lặp while.
Vì vậy, câu trả lời rõ ràng là str
hoàn toàn nên được khai báo trong vòng lặp while. Không ifs, không ands, không buts.
Trường hợp duy nhất mà quy tắc này có thể bị vi phạm là nếu vì một lý do nào đó, điều quan trọng quan trọng là mọi chu kỳ đồng hồ phải được vắt ra khỏi mã, trong trường hợp đó bạn có thể muốn xem xét việc khởi tạo một cái gì đó trong phạm vi bên ngoài và sử dụng lại thay vì tái hiện nó trên mỗi lần lặp của một phạm vi bên trong. Tuy nhiên, điều này không áp dụng cho ví dụ của bạn, do tính bất biến của các chuỗi trong java: một thể hiện mới của str sẽ luôn được tạo ở đầu vòng lặp của bạn và nó sẽ phải bị loại bỏ ở cuối vòng lặp, vì vậy sẽ có không có khả năng để tối ưu hóa ở đó.
EDIT: (đưa ra nhận xét của tôi dưới đây trong câu trả lời)
Trong mọi trường hợp, cách đúng đắn để làm mọi thứ là viết đúng mã của bạn, thiết lập yêu cầu hiệu suất cho sản phẩm của bạn, đo sản phẩm cuối cùng của bạn theo yêu cầu này và nếu nó không thỏa mãn nó, thì hãy tối ưu hóa mọi thứ. Và điều thường xảy ra là bạn tìm cách cung cấp một số tối ưu hóa thuật toán chính thức và tốt đẹp chỉ trong một vài nơi khiến chương trình của chúng tôi đáp ứng các yêu cầu về hiệu suất của nó thay vì phải đi khắp toàn bộ cơ sở mã của bạn và điều chỉnh và hack mọi thứ trong đó để bóp chu kỳ đồng hồ ở đây và ở đó.