Dans le cadre de l'écriture d'un itérateur, je me suis retrouvé à écrire le code suivant (suppression de la gestion des erreurs)
public T next() {
try {
return next;
} finally {
next = fetcher.fetchNext(next);
}
}
le trouvant un peu plus facile à lire que
public T next() {
T tmp = next;
next = fetcher.fetchNext(next);
return tmp;
}
Je sais que c'est un exemple simple, où la différence de lisibilité n'est peut-être pas si écrasante, mais je suis intéressé par l'opinion générale quant à savoir s'il est mauvais d'utiliser try-finally dans des cas comme celui-ci où il n'y a pas d'exceptions impliquées, ou s'il est réellement préféré lorsqu'il simplifie le code.
Si c'est mauvais: pourquoi? Style, performance, pièges, ...?
Conclusion Merci toutes vos réponses! Je suppose que la conclusion (au moins pour moi) est que le premier exemple aurait pu être plus lisible s'il s'agissait d'un modèle courant, mais qu'il ne l'est pas. Par conséquent, la confusion introduite par l'utilisation d'une construction en dehors de son objectif, ainsi que le flux d'exceptions éventuellement obscurci, l'emporteront sur toutes les simplifications.
Iterator
, où vous avez en effet besoin d'une sorte de prélecture pour hasNext()
fonctionner. Essayez-le vous-même.
Iterator
est que vous devez récupérer la valeur dans hasNext()
(car la chercher est souvent le seul moyen de savoir si elle existe) et la renvoyer next()
comme l'OP l'a fait.
finally
blocs.