Як частина написання Iterator, я опинився, коли я написав наступний фрагмент коду (зняття помилок з обробки)
public T next() {
try {
return next;
} finally {
next = fetcher.fetchNext(next);
}
}
знайти його трохи легше, ніж читати
public T next() {
T tmp = next;
next = fetcher.fetchNext(next);
return tmp;
}
Я знаю, що це простий приклад, коли різниця в читанні може бути не такою переважною, але мене цікавить загальна думка щодо того, чи погано використовувати спроби, нарешті, у таких випадках, коли немає жодних винятків, або якщо він насправді кращий, коли він спрощує код.
Якщо це погано: чому? Стиль, продуктивність, підводні камені, ...?
Висновок Дякую за всі відповіді! Я думаю, висновок (принаймні для мене) полягає в тому, що перший приклад, можливо, був би більш читабельним, якби це був загальний зразок, але це не так. Тому плутанина, введена за допомогою конструкції поза цільовим призначенням, а також, можливо, затуманений потік винятків, буде переважувати будь-які спрощення.
Iterator
, де вам справді потрібна якась попередня завантаження, hasNext()
щоб працювати. Спробуйте самі.
Iterator
полягає в тому, що вам потрібно отримати значення в hasNext()
(оскільки його отримання досить часто є єдиним способом з'ясувати, чи існує воно) і повернути його next()
так, як це робило ОП.
finally
блоки.