Là một phần của việc viết Iterator, tôi thấy mình đã viết đoạn mã sau (xử lý lỗi tước)
public T next() {
try {
return next;
} finally {
next = fetcher.fetchNext(next);
}
}
thấy nó hơi dễ đọc hơn
public T next() {
T tmp = next;
next = fetcher.fetchNext(next);
return tmp;
}
Tôi biết đó là một ví dụ đơn giản, trong đó sự khác biệt về khả năng đọc có thể không quá lớn, nhưng tôi quan tâm đến ý kiến chung là liệu có tệ khi sử dụng thử trong những trường hợp như thế này khi không có ngoại lệ liên quan, hoặc nếu nó thực sự được ưa thích khi nó đơn giản hóa mã.
Nếu nó xấu: tại sao? Phong cách, hiệu suất, cạm bẫy, ...?
Kết luận Cảm ơn tất cả các câu trả lời của bạn! Tôi đoán kết luận (ít nhất là đối với tôi) là ví dụ đầu tiên có thể dễ đọc hơn nếu đó là một mẫu chung, nhưng không phải vậy. Do đó, sự nhầm lẫn được đưa ra bằng cách sử dụng một cấu trúc bên ngoài mục đích của nó, cùng với dòng ngoại lệ có thể bị che khuất, sẽ vượt xa mọi sự đơn giản hóa.
Iterator
, nơi bạn thực sự cần sắp xếp trước hasNext()
để làm việc. Hãy thử nó.
Iterator
là bạn cần tìm nạp giá trị trong hasNext()
(vì việc tìm nạp nó thường là cách duy nhất để tìm hiểu xem nó có tồn tại không) và trả lại nó next()
giống như OP đã làm.
finally
các khối.