Código hinchado en C++ con ejemplos

El exceso de código es la producción de código que se percibe como innecesariamente largo, lento o que desperdicia recursos. Es un problema en el desarrollo de software que hace que la longitud del código del software sea innecesariamente larga. Entonces, para escribir el código de calidad, siempre evitamos que el código se hinche en nuestro programa.

Las siguientes son algunas de las razones del código hinchado :

  • Encabezados: supongamos que hemos declarado algunas funciones en el archivo de encabezado como se muestra a continuación:

    #include <vector>
      
    // Function to find the sum of elements
    // in a vector
    inline int findSum(vector<int>& arr, int N)
    {
        int sum = 0;
        for (int i = 0; i < N; i++) {
            sum += arr[i];
        }
        return sum;
    }
      
    struct GfG {
      
        // Declare vector arr
        std::vector<int> arr;
      
        // Function
        int execute() const
        {
            return findSum(arr, arr.size());
        }
    };

    En el archivo de encabezado anterior, ambas funciones, execute() y findSum(), se compilan cada vez que usamos el archivo de encabezado anterior en cualquier código fuente por separado. Si incluimos cualquier archivo de encabezado y no usamos ninguna de las funciones de ese encabezado, aún compilará la funcionalidad y todas las demás características de los archivos de encabezado cada vez que ralentiza el tiempo de compilación de cada software. Cuando el proyecto es grande, contiene cientos de archivos fuente y cada función definida en el encabezado compilada cientos de veces. Esta práctica de escribir código para el desarrollo de software da como resultado una inflación de código, es decir, una declaración innecesaria de funcionalidad.

  • Plantillas: en C++ tenemos plantillas
    integradas para funciones y contenedores . Las plantillas son la forma generalizada de funcionalidad con diferentes tipos de datos. Cada instancia de una plantilla es una pieza de código completamente separada generada por el compilador. Considere a continuación un ejemplo de plantillas:

    template <class T>
    T findSum(const T* arr, int num)
    {
        return accumulate(arr, arr + num, T(0));
    }
      
    template <class T, int N>
    struct GfG {
        T arr[N];
        T run() const
        {
            T res = 0;
            for (int i = 0; i < N; i++)
                res += arr[i];
            return res;
        }
    };

    En la función de plantilla anterior, findSum() se compila una vez por cada tipo de parámetro de plantilla utilizado T .
    La función en GfG::run() se compila tantas veces como pares diferentes haya para llamar al método run() . Esta función puede tomar más tiempo para cambiar los valores de N. Existen diversas técnicas para superar este problema. El problema con los encabezados también se aplica a las plantillas, porque las plantillas casi siempre se definen en los archivos de encabezado.

    Hay dos formas de superar este problema:

    1. Defina funciones de plantilla en el archivo fuente y ejecútelas explícitamente.
    2. Use declaraciones de plantillas externas en el encabezado, combinadas con instancias de plantillas explícitas en los propios archivos de origen.

Programa:

#include <iostream>
using namespace std;
  
// Driver Code
int main()
{
    // Code Bloating
    string str("GeeksForGeeks");
  
    // Print string str
    cout << str << endl;
    return 0;
}
Producción:

GeeksForGeeks

El programa anterior funcionará perfectamente e imprimirá GeeksForGeeks . Pero hay un problema de código hinchado en el programa anterior en la primera línea de la función principal. La agenda del programa anterior es imprimir la string GeeksForGeeks , entonces, ¿por qué estamos creando un objeto de clase de string como resultado de la creación de un objeto de clase de string?
Simplemente podríamos escribir

cout << "GeeksForGeeks" << endl; 

Efectos de la hinchazón del código:

  • Crea objetos de algunas clases innecesariamente que pueden hacer que nuestro software sea lento en ejecución.
  • Es un problema en el desarrollo de software que hizo que la longitud del código del software fuera innecesariamente larga.

Publicación traducida automáticamente

Artículo escrito por Yogesh Shukla 1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *