W ramach pisania iteratora znalazłem, że piszę następujący fragment kodu (obsługa usuwania błędów)
public T next() {
try {
return next;
} finally {
next = fetcher.fetchNext(next);
}
}
znajdowanie go jest nieco łatwiejsze do odczytania niż
public T next() {
T tmp = next;
next = fetcher.fetchNext(next);
return tmp;
}
Wiem, że jest to prosty przykład, w którym różnica w czytelności może nie być tak przytłaczająca, ale interesuje mnie ogólna opinia na temat tego, czy źle jest używać try-wreszcie w przypadkach takich jak ten, w których nie występują wyjątki, lub jeśli jest to rzeczywiście preferowane, gdy upraszcza kod.
Jeśli to źle: dlaczego? Styl, wydajność, pułapki, ...?
Wniosek Dziękujemy wszystkim za odpowiedzi! Wydaje mi się, że wniosek (przynajmniej dla mnie) jest taki, że pierwszy przykład byłby bardziej czytelny, gdyby był powszechnym wzorcem, ale tak nie jest. Dlatego zamieszanie wprowadzone przez użycie konstruktu poza jego przeznaczeniem, wraz z prawdopodobnie zaciemnionym przepływem wyjątków, przeważy nad wszelkimi uproszczeniami.
Iterator
, gdzie rzeczywiście potrzebujesz pewnego rodzaju pobierania wstępnego, hasNext()
aby działać. Spróbuj sam.
Iterator
polega na tym, że musisz pobrać wartość do hasNext()
(bo pobieranie jest dość często jedynym sposobem, aby dowiedzieć się, czy istnieje) i zwrócić ją next()
tak, jak zrobił to OP.
finally
bloków.