¿Es una mala práctica crear bloques de código?

12

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 nombres diferentes para cada una de las pruebas, considerando que las pruebas son tan similares.

¿Es una mala práctica insertar bloques de código para que las variables queden fuera del alcance después de cada prueba y luego pueda usar sus nombres de nuevo? ¿O debería buscar otra solución? Debe tenerse en cuenta que consideré usar el mismo conjunto de variables para todas mis pruebas (y simplemente establecerlas todas en 0 después de que terminara cada prueba), pero tenía la impresión de que esto podría ser una mala práctica.

    
pregunta Inertial Ignorance 02.11.2017 - 03:09

2 respuestas

22

Los bloques son perfectamente razonables si los estás utilizando para abarcar algún recurso. Archivos, conexiones de red, asignaciones de memoria, transacciones de base de datos, lo que sea. En esos casos, el bloque es en realidad parte de la estructura lógica del código: usted genera un recurso, existe por algún tiempo y luego desaparece en un tiempo designado.

Pero si todo lo que está haciendo es buscar un nombre , entonces diría que son una mala práctica. En términos generales, 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 para el alcance del nombre son una cosa razonable. Pero estarías hablando de un código escrito con el propósito de una máquina, no de un humano.

Si un humano está escribiendo un código en el que necesita reutilizar nombres dentro de la misma función, yo diría que esos bloques probablemente deben ser funciones separadas. Especialmente si esos nombres se usan con diferentes tipos y / o significados dentro de esos bloques.

    
respondido por el Nicol Bolas 02.11.2017 - 04:48
10

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 (la adquisición de recursos es la 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, usarlo solo para reciclar nombres de variables no es una buena idea. Pero puedo verlo útil en casos con poca memoria

    
respondido por el Robert Andrzejuk 02.11.2017 - 03:35

Lea otras preguntas en las etiquetas