Como parte de escrever um Iterator, eu me vi escrevendo o seguinte trecho de código (removendo o tratamento de erros)
public T next() {
try {
return next;
} finally {
next = fetcher.fetchNext(next);
}
}
achando um pouco mais fácil de ler do que
public T next() {
T tmp = next;
next = fetcher.fetchNext(next);
return tmp;
}
Sei que é um exemplo simples, onde a diferença de legibilidade pode não ser tão impressionante, mas estou interessado na opinião geral sobre se é ruim usar o try-finalmente em casos como esse, onde não há exceções envolvidas, ou se é realmente preferido quando simplifica o código.
Se é ruim: por quê? Estilo, desempenho, armadilhas, ...?
Conclusão Obrigado por todas as suas respostas! Acho que a conclusão (pelo menos para mim) é que o primeiro exemplo pode ter sido mais legível se fosse um padrão comum, mas não é. Portanto, a confusão introduzida usando uma construção fora do seu objetivo, juntamente com o fluxo de exceção possivelmente ofuscado, superará quaisquer simplificações.
Iterator
, onde você realmente precisa de uma pré-busca para hasNext()
poder trabalhar. Tente você mesmo.
Iterator
é que você precisa buscar o valor hasNext()
(porque buscá- lo é muitas vezes a única maneira de descobrir se existe) e devolvê-lo next()
exatamente como o OP fez.
finally
blocos.