Durante la scrittura di un iteratore, mi sono trovato a scrivere il seguente pezzo di codice (eliminazione della gestione degli errori)
public T next() {
try {
return next;
} finally {
next = fetcher.fetchNext(next);
}
}
trovandolo leggermente più facile da leggere rispetto a
public T next() {
T tmp = next;
next = fetcher.fetchNext(next);
return tmp;
}
So che è un semplice esempio, in cui la differenza nella leggibilità potrebbe non essere così schiacciante, ma sono interessato all'opinione generale sul fatto che sia male usare try-finally in casi come questo in cui non ci sono eccezioni, oppure se è effettivamente preferito quando semplifica il codice.
Se è male: perché? Stile, prestazioni, insidie, ...?
Conclusione Grazie a tutte le vostre risposte! Immagino che la conclusione (almeno per me) sia che il primo esempio avrebbe potuto essere più leggibile se fosse un modello comune, ma non lo è. Pertanto, la confusione introdotta usando un costrutto al di fuori del suo scopo, insieme a un flusso di eccezioni forse offuscato, supererà qualsiasi semplificazione.
Iterator
, dove in effetti hai bisogno di una sorta di prefetch per hasNext()
funzionare. Provate voi stessi.
Iterator
è che è necessario recuperare il valore hasNext()
(perché recuperarlo è abbastanza spesso l'unico modo per scoprire se esiste) e restituirlo next()
come ha fatto l'OP.
finally
blocchi.