Introducción
Muchos lenguajes de programación "tipo C" usan sentencias compuestas (bloques de código especificados con "{" y "}") para definir un ámbito de variables.
Aquí hay un ejemplo simple.
for (int i = 0; i < 100; ++i) {
int value = function(i); // Here 'value' is local to this block
printf("function(%d) == %d\n", i, value);
}
Esto es bueno porque limita el alcance del value
a donde se usa. Es difícil para los programadores usar value
de manera que no deben hacerlo porque solo pueden acceder a él desde dentro de su alcance.
Casi todos ustedes son conscientes de esto y están de acuerdo en que es una buena práctica declarar las variables en el bloque que se utilizan para limitar su alcance.
Pero a pesar de que es una convención establecida para declarar variables en su alcance más pequeño posible, no es muy común usar una declaración compuesta desnuda (es una declaración compuesta que no está conectada a un if
, for
, while
instrucción).
Intercambiando los valores de dos variables
Los programadores a menudo escriben el código así:
int x = ???
int y = ???
// Swap 'x' and 'y'
int tmp = x;
x = y;
y = tmp;
¿No sería mejor escribir el código de esta manera?
int x = ???
int y = ???
// Swap 'x' and 'y'
{
int tmp = x;
x = y;
y = tmp;
}
Parece bastante feo, pero creo que esta es una buena manera de imponer la localidad variable y hacer que el código sea más seguro de usar.
Esto no solo se aplica a los temporales
A menudo veo patrones similares donde una variable se usa una vez en una función
Object function(ParameterType arg) {
Object obj = new Object(obj);
File file = File.open("output.txt", "w+");
file.write(obj.toString());
// 'obj' is used more here but 'file' is never used again.
...
}
¿Por qué no lo escribimos así?
RET_TYPE function(PARAM_TYPE arg) {
Object obj = new Object(obj);
{
File file = File.open("output.txt", "w+");
file.write(obj.toString());
}
// 'obj' is used more here but 'file' is never used again.
...
}
Resumen de la pregunta
Es difícil dar buenos ejemplos. Estoy seguro de que hay mejores maneras de escribir el código en mis ejemplos, pero de eso no se trata esta pregunta.
Mi pregunta es por qué no utilizamos más declaraciones compuestas "desnudas" para limitar el alcance de las variables.
¿Qué piensas acerca del uso de una declaración compuesta como esta?
{
int tmp = x;
x = y;
y = z;
}
para limitar el alcance de tmp
?
¿Es una buena práctica? ¿Es una mala práctica? Explica tus pensamientos.