Como parte de la escritura de un iterador, me encontré escribiendo el siguiente código (eliminación de errores de manejo)
public T next() {
try {
return next;
} finally {
next = fetcher.fetchNext(next);
}
}
resulta un poco más fácil de leer que
public T next() {
T tmp = next;
next = fetcher.fetchNext(next);
return tmp;
}
Sé que es un ejemplo simple, donde la diferencia en la legibilidad puede no ser tan abrumadora, pero estoy interesado en la opinión general sobre si es malo usar try-finally en casos como este donde no hay excepciones involucradas, o si realmente se prefiere cuando simplifica el código.
Si es malo: ¿por qué? Estilo, rendimiento, trampas, ...?
Conclusión Gracias a todas sus respuestas! Supongo que la conclusión (al menos para mí) es que el primer ejemplo podría haber sido más legible si fuera un patrón común, pero que no lo es. Por lo tanto, la confusión introducida al usar una construcción fuera de su propósito, junto con el flujo de excepciones posiblemente ofuscado, superará cualquier simplificación.
Iterator
, donde de hecho necesita algún tipo de captación previa para hasNext()
poder trabajar. Inténtalo tú mismo.
Iterator
es que necesita recuperar el valor hasNext()
(porque recuperarlo es a menudo la única forma de averiguar si existe) y devolverlo next()
como lo hizo el OP.
finally
bloques.