Ir al contenido

Código inflado

De Wikipedia, la enciclopedia libre
Esta es una versión antigua de esta página, editada a las 20:13 3 jun 2014 por Grillitus (discusión · contribs.). La dirección URL es un enlace permanente a esta versión, que puede ser diferente de la versión actual.

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

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 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

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

The following JavaScript algorithm has a large number of redundant variables, unnecessary logic and inefficient string concatenation.

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;
};

The same logic can be stated more efficiently as follows:

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

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

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 rutia desde cero.

Véase también

Referencias

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