Como reducir el ámbito de variables locales en bloques try-catch-finally

Al reducir el ámbito de las variables locales tanto como sea posible se evita confusión y se mejora el rendimiento de la aplicación debido a que si el ámbito de éstas se reduce el recolector de basura las considerará elegibles para ser colectadas más rápido. Sin embargo los bloques try-catch-finally pueden suponer un reto cuando nuestra finalidad es mantener el código limpio y las variables locales en su ámbito.

Miren la variable input en este ejemplo, debido a la necesidad de llamar a input.close() en un bloque finally es necesario declararla antes del bloque try lo que prolongaría su ámbito después del bloque finally oscureciendo nuestro código con variables innecesarias después del mismo.


static public String getContents(File aFile) {
StringBuilder contents = new StringBuilder();
BufferedReader input = null;
try {
input = new BufferedReader(new FileReader(aFile));
String line = null;
while ((line = input.readLine()) != null) {
contents.append(line);
contents.append(System.getProperty("line.separator"));
}
} catch (IOException ex) {

} finally {
try {
input.close();
} catch (IOException e) {
}
}
return contents.toString();
}

El código que se muestra a continuación hace lo mismo que el de arriba pero a diferencia de éste reduce el ámbito de la variable input con un segundo bloque try-finally dentro del primer bloque try-catch que solo servirá para controlar los errores que pudieran suceder al ejecutarse el código, pero la sentencia input.close de todas formas se ejecutará incluso cuando se produzca una excepción.

static public String getContents(File aFile) {
StringBuilder contents = new StringBuilder();
try {
BufferedReader input = new BufferedReader(new FileReader(aFile));
try {
String line = null;
while ((line = input.readLine()) != null) {
contents.append(line);
contents.append(System.getProperty("line.separator"));
}
} finally {
input.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
return contents.toString();
}

Leave a Reply

Your email address will not be published. Required fields are marked *

WP2Social Auto Publish Powered By : XYZScripts.com