For faster navigation, this Iframe is preloading the Wikiwand page for Código inflado.

Código inflado

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

  • Código que es ejecutado pero cuyo resultado jamás es usado (código muerto).
  • Re-evaluar expresiones que han sido calculadas anteriormente. Estos cálculos redundantes suelen generarse al implementar verificaciones de límites para prevenir desbordamientos de buffer. Los compiladores más sofisticados hacen estos cálculos una sola vez, eliminando así los cálculos redundantes, usando eliminación de subexpresiones comunes y desplazamiento de invariantes de bucle.

Ejemplos

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

Este artículo o sección necesita referencias que aparezcan en una publicación acreditada. Busca fuentes: «Código inflado»noticias · libros · académico · imágenesEste aviso fue puesto el 19 de mayo de 2014.

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

Véase también

Referencias

  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. 
{{bottomLinkPreText}} {{bottomLinkText}}
Código inflado
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?