Código inflado (o inflamado) conocido como Code bloat en Inglés consiste en generar código innecesariamente largo, lento o que hace un mal uso de recursos. Puede ser causa de insuficiencias en el lenguaje en que el código está escrito, insuficiencias en el compilador usado para compilarlo o por malas prácticas del programador. Al hablar de código inflado, normalmente es en referencia al tamaño del código (el producido por el programador), pero a veces puede ser en referencia al código generado o al tamaño de los archivos binarios.

Causas comunes editar

Habitualmente, el código inflado lo genera un programador que simplemente usa más líneas de código de las que requiere la solución óptima al problema.

Algunas de las razones por las que un programador acaba generando código inflado son:

Algunas implementaciones de plantillas de C++ son ejemplos de código inflado generado por el compilador.

Un compilador inadecuado podría generar una versión de cada método de una plantilla por cada tipo de dato con que se use la plantilla. Esto provoca que se compilen métodos que podrían no ser usados. Los compiladores y enlazadores más sofisticados detectan las copias no operativas y las descartan o incluso evitan generarlas, reduciendo así la inflamación de código. De esta manera el código generado con plantillas puede llevar a archivos binarios más reducidos ya que el compilador puede eliminar este tipo de código muerto.

Algunos ejemplos de código inflado producido por el compilador incluyen:

Ejemplos editar

El siguiente algoritmo de JavaScript tiene gran cantidad de variables redundantes, lógica innecesaria y concatenación ineficiente de cadenas.

function TK2getImageHTML(tamano, zoom, sensor, marcadores)
{
    var strImagenFinal = "";
    var strInicioHTML = '<img src="';
    var strFinalHTML = '" alt="The map"/>';
    var strURL = "http://maps.google.com/maps/api/staticmap?center=";
    var strTamano = '&size='+ tamano;
    var strZoom = '&zoom='+ zoom;
    var strSensor = '&sensor='+ sensor;

    strURL += marcadores[0].latitude;
    strURL += ",";
    strURL += marcadores[0].longitude;
    strURL += strTamano;
    strURL += strZoom;
    strURL += strSensor;

    for (var marcador = 0; marcador < marcadores.length; marcador++)
    {
        strURL += marcadores[marcador].addMarker();
    }

    strImagenFinal = strInicioHTML + strURL + strFinalHTML;
    return strImagenFinal;
};

La misma lógica se puede expresar de manera más eficiente como el siguiente:

TK2.getImageHTML = function(tamano, zoom, sensor, marcadores)
{
    var url =
    [
        'http://maps.google.com/maps/api/staticmap',
        '?center=', marcadores[0].latitude, ',', marcadores[0].longitude,
        '&size=', tamano,
        '&zoom=', zoom,
        '&sensor=', sensor
    ];

    for (var marcador = 0; marcador < marcadores.length; marcador++)
    {
        url.push(marcadores[marcador].addMarker());
    }

    return '<img src="' + url.join('') + '" alt="The map" />';
}

Densidad de código de diferentes lenguajes editar

La diferencia en densidad de código entre varios lenguajes de programación es tan grande que habitualmente se requiere menos memoria para un lenguaje compacto (como un lenguaje específico de dominio, Código empaquetado de Microsoft o Código enhebrado) que para un lenguaje escrito en lenguaje máquina.

Reducir la inflamación editar

Algunas técnicas para reducir el código inflamando incluyen:[2]

  • Refactorizar secuencias de código de uso común en una subrutina y llamar dicha subrutina desde diferentes puntos del código en lugar de copiar y pegar el código en todos esos puntos.
  • Reutilizar subrutinas existentes (puede que con parámetros adicionales) en lugar de crear una nueva rutina desde cero.

Véase también editar

Referencias editar

  1. http://www.stevemcconnell.com/ieeesoftware/bp16.htm
  2. «Código inflado». DocForge. Archivado desde el original el 5 de marzo de 2016. Consultado el 30 de diciembre de 2009. 

Enlaces externos editar