En C ++, ¿es una mala práctica crear bloques de código dentro de alguna función, como la siguiente:
bool f()
{
{
double test = 0;
test = // some other variable outside this function, for example.
if (test == // some value)
return true;
}
{
double test = 0;
test = // some variable outside this function, different from the last one.
if (test == // some value)
return true;
}
return false;
}
El punto de hacer esto sería usar el mismo nombre de variable de "prueba" varias veces, para el mismo tipo de procedimiento. En mi proyecto real, tengo múltiples variables y estoy realizando múltiples pruebas. Realmente no quiero seguir creando nuevas variables con diferentes nombres para cada una de las pruebas, considerando cómo las pruebas son tan similares.
¿Es una mala práctica insertar bloques de código para que las variables se salgan del alcance después de cada prueba y luego pueda usar sus nombres nuevamente? ¿O debería buscar otra solución? Cabe señalar que consideré usar el mismo conjunto de variables para todas mis pruebas (y solo establecerlas en 0 después de que finalizara cada prueba), pero tenía la impresión de que esto podría ser una mala práctica.
fuente
Respuestas:
Los bloques son perfectamente razonables si los está utilizando para abarcar algún recurso. Archivos, conexiones de red, asignaciones de memoria, transacciones de bases de datos, lo que sea. En esos casos, el bloque es en realidad parte de la estructura lógica del código: genera un recurso, existe durante un período de tiempo y luego desaparece en un momento designado.
Pero si todo lo que está haciendo es determinar un nombre , entonces diría que son una mala práctica. Hablando en general, por supuesto; Se pueden aplicar circunstancias especiales.
Por ejemplo, si esta función fue generada por algún sistema de generación de código, marco de prueba o similar, entonces los bloques por el alcance del nombre son algo razonable. Pero estaría hablando de código escrito con el propósito de una máquina, no un humano.
Si un humano está escribiendo código donde necesita reutilizar nombres dentro de la misma función, diría que esos bloques probablemente necesitan ser funciones separadas. Especialmente si esos nombres se utilizan con diferentes tipos y / o significados dentro de esos bloques.
fuente
No es una mala práctica crear bloques como este. Así es como funcionan los ámbitos.
Por lo general, esto se hace cuando se usa RAII (Adquisición de recursos es inicialización) y desea controlar cuándo se llama a los destructores.
Si se alarga, consideraría mover ese código a su propia función.
En mi opinión, solo usarlo para reciclar nombres de variables no es una buena idea. Pero puedo ver que ha sido útil en casos con poca memoria
fuente